やりたいこと
Googleスプレッドシートで、プルダウンを連動させる。
以下のように、カテゴリ、商品と2つのプルダウンがある場合に、カテゴリで選択した内容に基づいて、商品の選択肢を変える
システム開発では、プルダウン(本記事だとカテゴリ)を選択した時に連動させるプルダウン(本記事だと商品)の選択肢を非同期で取得する、というのをやりますが、同じことをスプレッドシートで実現します。
僕の大好きなミスドの商品を使用して、以下のようにプルダウンの選択肢を絞れるように作りたいと思います。
▼カテゴリで「ポン・デ・リング」を選択した場合、商品は「ポン・デ・リング」の商品が選択できる
▼カテゴリで「オールドファッション」を選択した場合、商品は「オールドファッション」の商品が選択できる
プルダウンの選択肢になるリストを用意する
カテゴリと商品プルダウンの選択肢になるリストを作ります。
以下のようにA列がカテゴリ、B列以降が商品となっていて、紐付けたい商品を同じ行に記述します。
以下「ミスドカテゴリ商品リスト」シートと示します。
連動させるためのシートを作る
以下のようなシートを作ります。
このシートはA列がカテゴリ、B列以降が商品というのは先ほどと同様ですが、関数を使用して作成します。
A列は以下のようにします。
='プルダウン選択'!A2
「プルダウン選択」というのは、プルダウンで選択するシートです。
以下のようにプルダウンを作っています。
つまり、
='プルダウン選択'!A2
というのはカテゴリプルダウンで選択した文字列になります。
セルの位置は双方のシートで一致するように指定します。
(本記事の例だとA2セル)
A3セル以降も同様です。
これで連動用のシートのA列はカテゴリプルダウンで選択した文字列が表示されるようになりました。
続いて、連動用シートのB列は以下のようにします。
=IFERROR(OFFSET('ミスドカテゴリ商品リスト'!$A$1, MATCH($A2,'ミスドカテゴリ商品リスト'!$A:$A, 0)-1, COLUMN(A2)),"")
「ミスドカテゴリ商品リスト」というシートが最初にリストを定義したシートです。
MATCH関数でA列(カテゴリプルダウンで選択した文字列)をリストから探して、該当のカテゴリの商品を取得しています。
B列以降は商品の数だけ同じ関数を使用します。
本記事の場合だとG列まで同じ関数を使用しています。
※列を固定にする箇所としない箇所があるので、ご注意ください。
結果、以下のようになりますが、2行目のE、F、G列にも関数が入っているという感じです。
「ポン・デ・リング」は商品が3つなので、D列までになっています。
このようにA列、B列以降に関数を設定したら、各行にも同じように関数を設定しておきます。
以下「プルダウン連動用」シートと示します。
スプレッドシートのデータの入力規則を設定
最後にプルダウンとして表示するセルに対して、データの入力規則を設定します。
まず、カテゴリプルダウンです。
カテゴリは単純にリストのA列(先頭行はヘッダーにしているので除く)です。
='ミスドカテゴリ商品リスト'!$A$2:$A
続いて、商品プルダウンです。
先ほど作成した連動用のシートの商品部分を指定します。
商品部分は選択したカテゴリによって、動的にリストを作るようにしたので、データの入力規則が変わらなくても選択するカテゴリが変わると選択肢が変わるという仕組みです。
それぞれのシートで行が対応するように作っているので、行は可変になるようにしています。
='プルダウン連動用'!$B2:$G2
まとめ
こうやって文字に起こしてみると分かりにくい部分もあると思うので、実際にやってみるのが分かりやすいかと思います。