さくっとエクセレートさくっとエクセレート
PR

条件でリストが変わる連動Excelプルダウンの作り方【カテゴリ分けも自動反映】

Thumbnail for 条件でリストが変わる連動Excelプルダウンの作り方【カテゴリ分けも自動反映】
  • ドロップダウンリストで「部署」を選んだら、隣のセルの「担当者」リストが自動で切り替わる仕組みを手軽に作りたい
  • 項目が増えるたびに設定をやり直す手間を省きたい
  • 更新漏れによる入力ミスを防ぎたいが、チェック作業の負荷も減らしたい

エクセルの連動ドロップダウンリスト/プルダウン(多段階リスト)は業務効率を大きく高める機能ですが、構築手法によってメンテナンスの負荷が大きく変わります。

この記事では、連動リストの基本的な作り方から、運用コストを最小化する「テーブル機能」の活用法まで 解説します。データの追加だけで運用が完結する環境を構築できるようになります。

エクセルのバージョン

本記事は、エクセル2024を基に作成しています
環境によっては、UIなどの細かな点が異なる可能性があります。

完成イメージ|連動ドロップダウンリスト(プルダウン)の2つの構成

エクセルの連動ドロップダウンリストを構築する構成は、大きく2種類あります。一般的によく紹介されている基本的な構成と、テーブルを活用してメンテナンス性を高めた構成の2つです。

2つの構成の概要は次のとおりです。

  • 構成A :名前の定義 + INDIRECT関数

  • 構成B :テーブル化(構造化参照)+ INDIRECT関数

参照するリストは同一シートだけでなく、別シートの場合でも問題なく動作します。

吉峰
吉峰

本記事では「部署」と「担当者」の連動を例に使いますが、商品管理や地域選択など、「親子関係」のあらゆるリストに応用できます。

前知識|連動ドロップダウンリストに必要な2つの基本機能

連動ドロップダウンリストを作るには、データの入力規則 と 「INDIRECT関数 の役割を理解しておく必要があります。ここでは、この2つの基本機能について説明します。

 

機能1:データの入力規則

Excelのドロップダウンリストは、データの入力規則機能を使って実現します。

データの入力規則機能を使うと、セルに選択肢を表示させることができます。設定は「データ」タブの「データの入力規則」から行い、入力値の種類を「リスト」に指定することで有効になります。

データの入力規則の設定場所とダイアログ
 

機能2:INDIRECT関数

INDIRECT関数 は、文字列を「参照先」として動的に切り替えるための関数で、連動リストを実現する上で欠かせない役割を担います。

INDIRECT関数を使うと、セルに入力された文字列をもとに参照先を動的に切り替えられます。

INDIRECT関数ありとなしの例

連動リストでは、以下の2つの目的で活用します。

  • 1段階目のセルの値をもとに、対応する 「 名前の定義を動的に呼び出す
  • 入力規則では直接扱えない 「 テーブルの参照式(構造化参照)を正しく認識させる

構成A|名前の定義+INDIRECT関数

名前の定義と「 INDIRECT関数を組み合わせて連動ドロップダウンリストを作成する方法を説明します。連動リストの作成手順としてよく知られている方法ですが、運用上の課題があります。

 

構築手順

構成Aの構築手順は以下の4ステップです。

STEP1

参照リストを作成する

部署名を並べたリストと、部署ごとの担当者リストを、別シートに作成します。たとえば以下のように配置します。

※ B2セルを開始セルとする

営業部開発部総務部
山田 太郎鈴木 一郎小林 五郎
佐藤 花子田中 次郎加藤 六郎
高橋 三郎伊藤 健一
渡辺 真二
STEP2

名前を定義する

各担当者リストのセル範囲を選択し、数式タブの名前の定義を使って名前を付けます。部署(営業部, 開発部, 総務部の数だけ定義が必要です。

名前の定義画面
  • 名前 :リストの見出し(例:営業部開発部総務部
  • 範囲 :リストのデータ範囲(例:Sheet1!$B$3:$B$5Sheet1!$C$3:$C$6Sheet1!$D$3:$D$5

「範囲選択から作成」が便利

一括で名前を定義したい場合、
範囲選択から作成を使うと便利です。
「見出し+リストの項目」をまとめて選択してからクリックするだけで、
見出しに対応する名前の定義が自動的に作成されます。

「範囲選択から作成」を使った例

「名前の管理」から設定済みの定義を確認・修正することも可能

名前の管理ダイアログ
STEP3

ドロップダウンリスト1段階目の入力規則を設定する

ドロップダウンリストの1段階目のセルの「データの入力規則」で、以下の数式を入力します。

  • 元の値=$B$2:$D$2

B2:D2は参照するリストの部署名のセル範囲を指定します。

データの入力規則ダイアログ1段階目

警告は無視する

「元の値 はエラーと判断されます。
続けますか?」と出た場合は、
気にせず「はい」をクリックすればOKです。

STEP4

ドロップダウンリスト2段階目の入力規則を設定する

ドロップダウンリストの2段階目のセルの「データの入力規則」で、以下の数式を入力します。

  • 元の値=INDIRECT(G4)

※ G4は1段階目(部署名)のセルアドレスを指定します。

データの入力規則ダイアログ2段階目

この手順により、G2 に「営業部」と入力されるとINDIRECT関数が「営業部」という名前の範囲を参照し、対応する担当者リストが表示されます。

 

課題:項目追加時のメンテナンスが大変

構成Aの課題は、リストの項目やカテゴリを追加するたびに、名前の定義を手作業で修正する必要がある点です。

たとえば担当者を1名追加した場合、名前の定義 で参照している範囲に新しいセルが含まれないため、名前の管理から手作業で範囲を修正する必要があります。カテゴリ(部署)を追加する場合も、新たに 名前の定義 が必要です。

項目・カテゴリを増やしても反映されない

構成B|テーブル化+INDIRECT関数

参照するデータを テーブル化 し 「INDIRECT関数と組み合わせて、項目の追加が自動反映される連動ドロップダウンリストを作成する方法を説明します。

この構成のメリットは、項目やカテゴリが増えるたびに範囲を修正するのが面倒という課題を解消できる点です。テーブル機能を使うことで、リストの末尾にデータを追加するだけでドロップダウンリストの選択肢が自動的に更新されるようになります。

 

構築手順

構成Bの構築手順は以下の4ステップです。

STEP1

参照リストをテーブル化する

まず、参照元となるリストを作成します。

営業部開発部総務部
山田 太郎鈴木 一郎小林 五郎
佐藤 花子田中 次郎加藤 六郎
高橋 三郎伊藤 健一
渡辺 真二

次に参照リストのセル範囲を選択し、Ctrl + T でテーブルに変換します。

テーブルの構造は以下のように作ります。

  • 列の見出し :各部署名(例:「営業部」「開発部」「総務部」
  • 各列のデータ :その部署に所属する担当者名
テーブル化された参照リスト
STEP2

ドロップダウンリスト1段階目の入力規則を設定する

ドロップダウンリスト1段階目のセルの「データの入力規則」で、「元の値」欄に以下の数式を入力します。

=INDIRECT("テーブル1[#見出し]")

「テーブル1」は実際のテーブル名に合わせる(テーブル名は、テーブル選択後に「テーブルデザイン」タブから確認・変更可能)

リスト1の参照元範囲ダイアログ
STEP3

ドロップダウンリスト2段階目の入力規則を設定する

ドロップダウンリスト1段階目のセルで、リスト項目のいずれかをまず選択しておきます(設定時に 「リストの元の値は、区切り文字で区切られたリストか、または単一の行または列の参照でなければなりません。というエラー回避のため

ドロップダウンリスト2段階目のセルの「データの入力規則」で、「元の値」欄に以下の数式を入力します。

=INDIRECT("テーブル1[" & G4 & "]")

※ G4は1段階目の部署名が入るセルアドレスを指定「テーブル1」は実際のテーブル名に合わせる

リスト2の参照元範囲ダイアログ
 

メリット:リストの項目・カテゴリ追加を自動反映

構成Bでは、テーブルにデータや列を追加するだけでドロップダウンリストに自動反映されます。 設定を変更する手間は不要です。

データの追加方法はシンプルです。

  • 担当者(項目)を追加する場合 :テーブルの対象列の最終行の下にデータを入力するだけで、ドロップダウンリストに自動反映されます
  • 部署(カテゴリ)を追加する場合 :テーブルに新しい列を追加するだけです。その列に名前の定義を設定するだけです
 

注意点:リスト内に空白セルが含まれる場合あり

構成Bでは、ドロップダウンリストの中に 空白の選択肢 が表示される場合があります。すべてのカテゴリを1つのテーブルに格納している仕組み上、担当者の人数が少ないカテゴリの列には空白セルが生じてしまうためです。

空白を回避したい場合は、カテゴリごとに テーブルを分割 し、各テーブルに名前設定し、INDIRECT関数の参照先を書き換える対応が必要になります。(実は、テーブル設計の観点ではテーブルを分割した方が理にかなっています。テーブルを1つにまとめる場合、「1つのレコードに1セットのデータを持つ」という原則を無視することになるためです)

テーブル分割後の構成イメージ

ただしテーブルを分割すると、カテゴリが増減するたびにテーブルの追加・削除と入力規則の再設定が必要となり、手間になります。運用のしやすさを優先するなら、空白が入ることを許容したうえで1つのテーブルにまとめる構成の方が扱いやすいでしょう。

テーブル統合/分割の比較
 

参考:整然データ形式でマスタ管理したいなら

参照データを 整然データ(正規化されたデータ) 形式で管理したい場合は、Power Query(パワークエリ) を使って連動リスト向けの形式に変換する方法が有効です。

データベース設計の観点では、再利用性の高いマスタとして機能させるために、リストのデータを「整然データ形式(1列目に属性、2列目に値がある縦長の形式)で管理することが理想的です。

ただしこの形式は、そのままエクセルの連動リストに使いにくいという欠点があります。そこで Power Query(パワークエリ) を使って横長の形式に変換する方法が有効です。

整然データから Power Query で横長データへの変換イメージ
吉峰
吉峰

入力規則はスピル関数に対応していません。FILTER関数が使えれば、Power Queryでの整形も不要で手軽なのですが…。

応用:3段階以上の多段階ドロップダウンリストの構築方法

3段階以上の連動ドロップダウンリストは、構成Bの設定をカテゴリ階層の数だけ繰り返すことで実現できます。 「大分類 > 中分類 > 小分類」のように階層が深くなる場合も、構成Bの考え方を応用できます。

多段階連動ドロップダウンリストの構成イメージ

具体的には、中分類・小分類ごとにテーブルと 名前の定義 を用意し、入力規則で同様の INDIRECT関数 を設定します。階層が増えるほどテーブルの数は増えますが、各段階の設定ロジックは共通です。

多段階連動ドロップダウンリストの完成イメージ
階層セル(例)入力規則の「元の値」に設定する数式
1段階目J11=INDIRECT("T_業種[業種]")
2段階目K11=INDIRECT("T_職種[" & J11 & "]")
3段階目L11=INDIRECT("T_詳細[" & K11 & "]")

まとめ|運用コストの低い連動リストを作ろう

構成としては基本的に 構成B(テーブル活用形) がオススメです。項目やカテゴリの追加がデータ入力だけで完結し、運用コストが抑えられます。

状況によっては構成を変えた方が適している場合もあります。

ケース推奨構成備考
とにかく手軽に作り・管理も楽にしたい構成B空白セルが入る可能性あり
空白セルをドロップダウンに出したくない構成B(テーブル分割ver)設定がやや複雑。カテゴリ追加時に再設定が必要
データを整然データ形式で一元管理したい構成B + Power Query設定がやや複雑。Power Query設定が別途必要

構成B(テーブル分割ver)は空白を排除できる反面、カテゴリが増減するたびに再設定が必要になります。

構成B + Power Queryはデータ管理の再利用性が高まる一方、Power Query の設定が別途必要です。

それぞれのメリットと手間を天秤にかけて、運用環境に合った構成を選んでください。

吉峰
吉峰

本サイトでは、業務に特化したテンプレートの作成方法も紹介しています。