2つのプルダウンリスト(ドロップダウンリスト)を連携させる!
「データの入力規則」機能をつかって2つのプルダウンリスト(ドロップダウンリスト)を連携する方法を紹介します!
基本的な入力規則については、次の記事を参照してください。
実現したいこと
最初に実現したいことです!次の動画のように、「プルダウンリスト1」の選択項目によって、「プルダウンリスト2」の選択項目を変えます。
連携の方法
2つのプルダウンリスト(ドロップダウンリスト)を連携させる方法はいくつかありますが、今回は「QUERY関数」と「UNIQUE関数」を使った方法で実現したいと思います!
QUERY関数・UNIQUE関数が分からない方はこちら
サンプルとして、プルダウンリスト1にスポーツの競技名、プルダウンリスト2にその競技に使う道具が選択出来るような連携をしてみたいと思います。
実現の流れは次のような感じです。
- プルダウンリストの元となるデータを作る
- プルダウンリスト1に使うリストをUNIQUE関数で作成する
- 2で作ったリストでプルダウンリスト1を作成する
- プルダウンリスト1の値と、元データからプルダウンリスト2のリストをQUERY関数を使って作成する
- 4のリストを使ってプルダウンリスト2を作成する
ごちゃついてますが、他の方法に比べると僕的には簡単に出来ると思います。
では、細かく説明します。
プルダウンリストの元となるデータを作る
まずは、元のデータを作ります。
G列・H列にプルダウンリストの元のデータを打ち込みます。G列に競技名、H列に道具を入れます。順番は関係ないので思いついたものを入れて行けばOKです。追加することで自動的に反映するように作っていきます。
プルダウンリスト1に使うリストをUNIQUE関数で作成する
元データを使って、D列に列にUNIQUE関数を利用して、プルダウンリスト1の一覧を作ります。
UNIQUE関数は引数に指定した範囲の重複の無いデータをリストで出してくれる関数です。
D2セルに次の数式を入れます。
=UNIQUE(G2:G)
範囲の最後が「G」だけで行数を指定していませんが、スプレッドシートはこのように範囲の終わりを行数なしで指定すると、その列の一番下までの範囲を選択することが出来ます。
こうすることで、後で下にデータを追加しても自動的にリストに反映することが出来ます。
G1セルは見出しなので範囲に入れていません。
2で作ったリストでプルダウンリスト1を作成する
これは普通に、データの入力規則で設定するだけです。プルダウンリストのリスト範囲も「D2:D」とデータの増減に対応する形で設定します。
プルダウンリスト1の値と、元データからプルダウンリスト2のリストをQUERY関数を使って作成する
次にプルダウンリスト1の選択内容を使って、QUERY関数でE列にプルダウンリスト2のデータを作成します。
QUERY関数は、指定の範囲から様々な条件でデータを抽出することが出来る関数です。
E2セルに次の関数を入力します。
=QUERY(G2:H,”select H where G='” & A2 & “‘”, 0)
ここでも、データ範囲を「G2:H」として、データの増減に対応出来るようにしています。
※第3引数(見出し)には「0」を指定しています。
ちょっとややこしいこと言うかもしれませんが、E1セルに
=QUERY(G1:H,”select H where G='” & A2 & “‘”, 1)
としても同じように出来ます。(E列の見出しは「道具とか」になります)
A2のプルダウンリスト1を、一旦「バスケ」を選んどきましょう。
数式を入力すると、E列にバスケの道具だけが抽出されます。
4のリストを使ってプルダウンリスト2を作成する
最後に、B2セルに、E列のデータを使ったプルダウンリストを設定すれば完成です!
実行動画
まとめ
2つのプルダウンリストを連携させる方法を紹介しました!アイデア次第でいろんなことが出来るのが楽しいですね^_^
もちろん、元データやプルダウンリストの元は別のシートに作ったりと実際は見えないところにおいてくださいね!
コメント
こちらの方法すごい!と思いやってみたところ
=QUERY(G2:H,”select H where G='” & A2 & “‘”)
こちらの部分で文字列のセルが全部1つのセルに結合して表示されてしまいます。
数字は正常にプルダウンで表示されます。
書式設定をいろいろ試してもだめで。解決方法わかりましたらご教授いただければたすかります!
コメントありがとうございます!
確認してみますね(^o^)
少々お待ち下さい!
確認しました!
ご指摘の通り、H列(道具とか)に数値があると、QUERY関数の見出しの処理が上手く出来ないようでした
※途中でデータ形式が変わると、そこまでを見出しだと思っちゃう
E2セルの数式を以下のように変更してください。
=QUERY(G2:H,”select H where G='” & A2 & “‘”)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
=QUERY(G2:H,"select H where G='" & A2 & "'",0)
最後に「,0」を追加する。
これは、見出しの設定で、見出し無いよ的な意味になります。
省略すると、スプレッドシートが良い感じに設定してくれるんですが、いい感じを間違えちゃってたみたいですねw
ご指摘ありがとうございます!
本文も修正させていただきますね
うまくいきました!本当にありがとうございます(^^)助かりました!今後も参考にさせていただきます!
お役に立てて嬉しいです
今後とも宜しくお願いします!
はじめまして。
説明を拝見し、まさにやりたいことが出来ました!
ほんとにありがとうございます。
はじめまして!
コメントありがとうございます(^o^)
お役に立てて嬉しいです!!
先ほどコメントさせていただいた者です。
間違ってフルネームで投稿してしまったので、もし公開されるようでしたらハンドルネームをmmtsに変更していただけないでしょうか。よろしくお願いいたします。。
コメントありがとうございます!
ハンドルネーム変更させてもらいました^_^
ご質問の件ちょっと見てみますね!
記事読ませていただきました。GSS勉強中なのでとても分かりやすかったです!
質問なのですが、もしよければお答えいただけると大変嬉しいです。
記事内のサンプルでは、A2セルに入力した値によってB2セルの入力規則を設定していると思いますが、仮にA列が下まで続いている表を作成する場合、A列に入力した値によってB列の入力規則を変える、という仕組みを作ることは可能でしょうか?
H2セルの式のA2をA:Aに変えるだけではダメだったので、何か方法はないかと探しております。。
コメント拝見しました!
ありがとうございます!
A列も一覧になっているパターンですね^_^
今回紹介させてもらった方法は、プルダウン作るためのリストを中間で作っているので、連続したデータに適応は難しいですね(T_T)
もう少し面倒にはなりますが、他の方が連携の方法を紹介している記事がありますのでこちらを参考にしていただくと実現出来るかと思います!
https://qiita.com/haguhoms/items/3b4548f1d37cea1ed48f
https://xn--t8j3bz04sl3w.xyz/spreadsheet/pulldown-rendou/2860/
EXCELみたいに、入力規則にINDIRECT関数使えると良いんですけど、使えない仕様みたいなんで、手間かかってしまいそうです(T_T)
早速のご返信ありがとうございました!
参考記事も読ませていただきました。
今回作りたいプルダウンですが、プルダウンリスト①は年月で、プルダウンリスト②は別のシートに毎月少しずつ増えていくのです。。
そのため、この記事のような連動ができたら良いな、と思ったのですが、どこかに全年月分の②リストを用意して、参照する場所を変えなければいけないのが難しそうですね。
A列は年月のプルダウン、B列は別のシートとのことですが
年月とB列はどのような関係で連動するのでしょうか?
1月だったら○○、2月だったら△△という感じですか??