Googleスプレッドシートの公式ロゴマークとスプレッドシート画面

広告 オフィス・ドキュメント

【簡単】スプレッドシートの連動プルダウン(2段階)設定方法とINDIRECT関数活用

Googleスプレッドシートで大量のデータを管理する際、入力項目が多くて入力間違いが発生したり、プルダウンの選択肢が多すぎて目的の項目を見つけるのに時間がかかったりすることがあります。そうした課題を解決するのに有効なのが、1つ目のプルダウンで選択した内容に応じて、2つ目のプルダウンの選択肢を自動的に絞り込む「連動プルダウン(2段階プルダウン)」の設定です。

この仕組みを導入すると、例えば「大分類」で「果物」を選んだら「中分類」には「りんご・バナナ・みかん」だけが表示され、不要な選択肢が非表示になるため、入力のスピードが格段にアップし、誤入力を防ぐことができます。

設定自体も非常にシンプルで、特別なプログラムを使うことなく、基本の機能と関数だけで簡単に実装できるので、ぜひこの記事を読みながら一緒に試してみてくださいね。

記事のポイント

  • 連動プルダウンは1段階目の選択に応じて2段階目のリストが自動で切り替わる機能
  • 不要な選択肢が表示されないため、入力ミスの防止と作業効率化に絶大な効果がある
  • 設定は「マスターシートの作成」「名前の定義」「INDIRECT関数」の3ステップが基本
  • 複数行に対応する場合はFILTER関数やGAS(Google Apps Script)を活用する
KYO
KYO

昔、部署全体の経費精算シートを作った際、勘定科目を1つの長いリストにまとめたら『探すのが面倒すぎる』とブーイングが起きたことがあります。そこで2段階の連動プルダウンを導入しようとしたのですが、Excelと同じ感覚でデータの入力規則欄に直接INDIRECT関数を入れたら全く動作せず、スプレッドシートでは作業用列を経由させる必要があると気づくまで何時間もネットで調べ回る羽目になりました……。

連動プルダウンの概念とINDIRECT関数を用いた基本設定

連動プルダウンの基本

スプレッドシートで高度な入力フォームを作ろうと考えたとき、真っ先に候補に挙がるのがこの連動プルダウンです。少し難しそうに聞こえるかもしれませんが、仕組みそのものはとてもシンプルですよ。

まずは、連動プルダウンがどのような仕組みで動いているのか、そしてそれを導入することで具体的にどんなメリットが得られるのか、基本的な概念から整理していきましょう。

手順1:大分類と中分類のマスターデータを作成する

連動プルダウンを作成するための最初のステップは、プルダウンの選択肢の元となる「マスターデータ」の構築です。

入力を行うシートに直接リストを書き込んでしまうと、後から項目を追加したり変更したりするときに、シート全体のレイアウトが崩れてしまう原因になります。そのため、必ず「マスター専用の新しいシート」を作成して、そこで選択肢を管理するのがおすすめですよ。

手順2:各大分類に対応する選択肢の範囲に「名前」を定義する

マスターデータの作成が終わったら、次の手順は「名前付き範囲」の定義です。これは、スプレッドシートのセル範囲に対して、特定の名前(ラベル)を付ける機能のことです。

大分類と同じ文字列でセル範囲に名前を付けておくことで、数式がその名前を認識して、正しいリストを呼び出せるようになりますよ。定義する名前は、大分類のセルに表示される文字列と「一字文字も含めて完全に同一」でなければいけないので注意してくださいね。

名前付き範囲の設定と連動動作の構築手順

名前付き範囲の設定

下準備はバッチリ整いましたでしょうか?ここからは、いよいよ実際にスプレッドシート上で動くプルダウンを設置し、それらを美しく連動させる具体的な構築手順に入っていきますよ!

手順3:1つ目のプルダウン(大分類)を設置する

まずは土台となる1つ目のプルダウン(大分類)を作っていきましょう。設定したいセルを選び、「データ」メニューから「データの入力規則」を開いて「プルダウン(範囲から指定)」を選びます。

プルダウンの項目を直接手入力するのではなく、必ず「範囲から指定」を使ってセルを参照するようにしましょう。こうしておくことでメンテナンスが格段に楽になりますよ。

手順4:INDIRECT関数を使って2つ目のプルダウン(中分類)を連動させる

大分類プルダウンで選んだ値に合わせて、2つ目のプルダウン(中分類)の中身をガラッと変える魔法の仕掛けを作っていきましょう。ここで大活躍するのが、INDIRECT関数です。

スプレッドシートではExcelと違い、入力規則のソース欄に直接INDIRECT関数を書くことができません。そのため、一度シート上の空いている列(作業用列)に =INDIRECT (大分類のセル) と入力し、その作業用列を2つ目のプルダウンの範囲として指定する必要があります。

【要注意】INDIRECT関数と名前付き範囲でエラーが出やすいケース

エラーが出やすいケース

連動プルダウンを設定する際、多くの方が躓いてしまうのが「名前付き範囲のルール」と「大元のデータの不一致」です。

親のプルダウンの選択肢に「パソコン・周辺機器」のように中黒(・)やスペースが含まれている場合、名前付き範囲には記号やスペースが使えないという仕様と衝突してしまいます。

補足

カテゴリ名には極力スペースや記号を使わず、シンプルな名前に統一するのが基本です。どうしても記号を含めたい場合は、SUBSTITUTE関数を組み合わせて記号をアンダースコアに置換してからINDIRECTに渡す工夫が必要になります。

複数行で連動プルダウンを動かすためのFILTER関数を用いたアプローチ

FILTER関数を用いたアプローチ

INDIRECT関数と作業用列を使った方法は、1行や数行程度なら完璧に機能するのですが、複数行にわたってデータを入力していくシートに適用しようとすると、途端に大きな壁にぶつかってしまいます。

作業用列が大量に必要になり、シートの動作が非常に重くなってしまうためです。

解決策:FILTER関数やGASを活用する

関数だけで解決したい場合は、FILTER関数を使って「現在編集している行のアクティブな選択肢だけ」を作業列に抽出し、それを参照させる方法があります。

ただし、過去の行に赤いエラー(警告マーク)が出やすいため、実務で本格的に運用する場合はGoogle Apps Script(GAS)を使って、大分類が変更された瞬間に中分類の入力規則を直接書き換える自動化を行うのが最もスマートで安定した解決策ですよ。最新の仕様については公式サイトもご確認ください。

  • この記事を書いた人

KYO

現役のシステムエンジニア。普段は企業向けの開発やツールの自動化を専門にしています。データの仕組みを知り尽くしたプロの視点から、スプレッドシートやExcel、Notion、AIツールの「本当に役立つ時短テクニック」を初心者向けに分かりやすく解説中!

-オフィス・ドキュメント