Excel FILTER関数×ドロップダウン連動の使い方|VBAで入力規則を自動切り替え!
Excel FILTER関数×ドロップダウン連動の使い方|VBAで入力規則を自動切り替え!- 2025年4月24日
- 2025年10月8日
- アイデア
- 入力支援, 自動化・効率化, 配列関数
- 3617view
- 0件
本記事には広告(PR)が含まれます。 くわしくは プライバシーポリシー をご確認ください。
Excelの「FILTER関数」は、条件に合ったデータだけを瞬時に抽出できる便利な関数です。一覧から特定の条件に絞って表示したり、フォームに応じた選択肢を動的に切り替えたりと、活用の幅が広がっています。
しかし、そんなFILTER関数にも1つ弱点があります。それは、「抽出結果をそのままプルダウン(入力規則)に使えない」という点です。
たとえば「都道府県を選ぶと、市区町村のリストが自動で切り替わる」といった連動入力をFILTER関数で実現したくても、通常の設定ではうまくいきません。
そこで本記事では、FILTER関数とVBA(マクロ)を組み合わせて、連動ドロップダウンを自動的に切り替える方法をわかりやすく解説します。
✔ FILTER関数でリストを抽出✔ VBAでそのリストを読み取り、入力規則に適用
という流れで、**より柔軟な連動フォームの構築が可能になります。
条件に応じた動的プルダウンを実現したい方や、FILTER関数をもっと実務で活用したい方は、ぜひ参考にしてみてください! プルダウン(入力規則)の設定方法については以下の記事にてご確認いただけます。 →Excelプルダウンのコピー・複数選択・削除・色分けの方法まとめ|連動や空白対応も解説!
→Excel連動プルダウンの活用事例まとめ|申請書・発注書で役立つ入力効率アップ術!
目次- 1 FILTER関数×ドロップダウンってどんな場面で使える?
- 1.1 代表的な活用シーン
- 1.1.1 ■ アンケートやフォーム入力
- 1.1.2 ■ 発注・見積書作成
- 1.1.3 ■ 顧客管理やマスタ参照
- 1.2 なぜFILTER関数が便利なのか?
- 1.1 代表的な活用シーン
- 2 FILTER関数の基本と制限をおさらい
- 2.1 FILTER関数の基本構文
- 2.1.1 例:
- 2.2 FILTER関数の主なメリット
- 2.3 ⚠ FILTER関数の注意点とよくある制限
- 2.3.1 入力規則には直接使えない
- 2.3.2 複数範囲・複数条件の書き方に注意
- 2.3.3 別シートの参照は「入力規則」と組み合わせる際に制限がある
- 2.4 補足:FILTER関数は「表示」としては非常に優秀
- 2.1 FILTER関数の基本構文
- 3 FILTER関数の結果をそのままプルダウンに使えない理由
- 3.1 なぜ使えないのか?
- 3.2 技術的な理由
- 3.3 解決方法:VBAの力を借りて制御する
- 4 FILTER×VBAで動的にプルダウンを制御する方法
- 4.1 サンプル構成と仕組みの流れ
- 4.1.1 処理の流れ:
- 4.2 ✅ VBAコード例(Worksheet_Changeイベント)
- 4.3 コードの補足ポイント
- 4.4 VBA設定の準備手順
- 4.5 FILTER数式の例(D列に設定)
- 4.1 サンプル構成と仕組みの流れ
- 5 FILTER+VBA連携の応用ポイントと注意点
- 5.1 ✅ 応用ポイント①:複数行に展開して使う
- 5.1.1 ▼ 改良例(複数行対応VBAの構想)
- 5.2 ✅ 応用ポイント②:別シートのFILTER結果を対象にする
- 5.3 ✅ 応用ポイント③:複数条件によるFILTER抽出
- 5.4 ⚠ 注意点①:入力規則の上書きに注意
- 5.5 ⚠ 注意点②:VBAが無効な環境では動作しない
- 5.1 ✅ 応用ポイント①:複数行に展開して使う
- 6 FILTER関数×VBAで柔軟な連動リストを作成しよう!
- 6.1 本記事で紹介したポイントをおさらい
- 6.2 こんな方に特におすすめの方法です
- 6.3 【関連記事】
- 6.3.1 ※参考書籍※
FILTER関数×ドロップダウンってどんな場面で使える?
FILTER関数とドロップダウン(プルダウン)を組み合わせると、「入力する人に合わせて、選択肢を自動で切り替える」という仕組みが作れます。これは、日常の業務でよくある”連動入力”のニーズにぴったりです。
代表的な活用シーン ■ アンケートやフォーム入力-
「都道府県を選んだら、市区町村の一覧が切り替わる」
-
「職種を選んだら、対応する部署だけを選択肢に表示」
-
「カテゴリを選ぶと、該当する商品のみ選べる」
-
「商品名を選んだら、対応する品番や単価が自動で設定される」
-
「顧客ランクを選んだら、そのランクの割引率一覧だけ表示」
-
「エリアを選んで、該当する担当者だけを一覧に」
これまでのExcelでは、こうした「条件によって選択肢を変える」仕組みは、INDIRECT関数+名前の定義 などで実現されてきました。しかしこの方法は、項目が増えると管理が煩雑になり、拡張性に限界がありました。
FILTER関数なら、次のようなシンプルな構文で動的なリスト抽出が可能です:
=FILTER(市区町村一覧[市区町村], 市区町村一覧[都道府県]=A2, "該当なし")これにより、一覧の更新や拡張にも強く、柔軟性の高い連動リストを構築できるようになります。
この章では主に「どんな場面で使えるか?」を紹介しましたが、次章では、FILTER関数の基本構文や注意点について、実例を交えて解説していきます。FILTER関数の基本と制限をおさらい
FILTER関数は、指定した条件に一致するデータだけを抜き出して表示する関数です。動的に絞り込みができるため、ドロップダウンやマスタ連動のベース作りに非常に便利です。
FILTER関数の基本構文 =FILTER(範囲, 条件, [一致しない場合の表示]) 例: =FILTER(B2:B100, A2:A100=E2, "該当なし")この式では、
-
A2:A100 の中から、E2 に一致する行を探し
-
その行に対応する B2:B100 の値だけを抽出
-
該当がなければ「該当なし」と表示されます
→ 実際には「都道府県」ごとの「市区町村」抽出などに使われます。
市町村抽出の例:
- あらかじめ市町村データを作成しておきます。 入力シートとは別のシートに作成しておいた方が間違って編集してしまうリスクを避けられます。
- フィルター関数を入力します。 今回はテーブル機能を利用しているため、以下の関数を入力しました。
=FILTER(市区町村一覧[市区町村], 市区町村一覧[都道府県]=A2, "該当なし")
テーブル名:市町村一覧データから北海道の市町村を抽出し表示させることができました。
FILTER関数の主なメリット-
リアルタイムで動的にリストが変わる
-
1つの関数で複数条件に対応できる
-
従来のVLOOKUPやIFよりも柔軟な構成が可能
FILTERの出力結果(スピル範囲)は見た目はリストですが、「データの入力規則(プルダウン)」では直接参照できないという制限があります。
やりたいこと 結果 =FILTER(…) を「元の値」に設定 ❌ エラーになる スピルされた範囲を入力規則に使いたい VBAなどで再設定が必要 複数範囲・複数条件の書き方に注意-
AND条件:(条件1)*(条件2) のように掛け算で書く 図の例では兵庫県かつ神戸市を抽出しています。
-
OR条件:(条件1)+(条件2) のように足し算で書く 図の例では東京都または大阪府の市町村を抽出しています。
-
表示用には問題ないが、入力規則や定義と組み合わせる際は制限あり
-
FILTER → 表示、VBA → 入力規則 に役割分担すると安定
たとえば、「都道府県を選んだら、該当する市区町村がF列にずらっと出てくる」という形なら、FILTERだけで十分です。ただし、「そのリストを選択肢として使いたい(=ドロップダウン化したい)」となると、VBAの力が必要になります。
次章ではいよいよ、FILTERの抽出結果をVBAで読み取り、プルダウンの入力規則に反映する仕組みを解説していきます。
FILTER関数の結果をそのままプルダウンに使えない理由
FILTER関数は非常に強力で、条件に合うデータを即座にリスト化できます。しかし、多くの方が最初につまずくのが「そのリストをそのままプルダウンの選択肢として使えない」という点です。
なぜ使えないのか?Excelの「データの入力規則(リスト)」では、セル範囲の参照しかできず、関数そのものを使うことができません。
たとえば、以下のような構文は入力規則の「元の値」に直接入力しても動作しません:
=FILTER(市区町村一覧[市区町村], 市区町村一覧[都道府県]=A2)これを入力規則に使おうとすると、次のようなエラーになります:
「この数式には問題があります」→ 入力規則ではFILTERのようなスピル関数は非対応
技術的な理由-
スピル関数の出力は「動的配列」であり、見た目は範囲に見えても、 入力規則の「元の値」で参照できるのは静的なセル範囲のみ
-
=D2# のようにスピル参照を間接的に指定しても、入力規則では使えないという制限があります
ここで登場するのが VBA(マクロ) です。
FILTER関数で生成したリストを、VBAで読み取り、入力規則のリストとして再設定することで、この制限を回避できます。
次章では実際に、都道府県の選択によって市区町村のプルダウンを切り替えるVBAコードのサンプルを使って、その仕組みを解説していきます。
POINT:FILTERは「見せる」には最適、でも「選ばせる(入力規則)」には工夫が必要!
FILTER×VBAで動的にプルダウンを制御する方法
FILTER関数で抽出されたリストは、入力規則に直接使えないことは前章でお伝えしました。そのため、FILTERの結果をVBAで読み取り、該当セルにプルダウンを設定し直すという手順で解決します。
サンプル構成と仕組みの流れ以下のような構成で動作します:
セル 内容 A2 都道府県の選択(東京、大阪など) D2:D10 FILTER関数で市区町村を抽出して表示 B2 市区町村を選択するドロップダウン(VBAで動的に設定) 処理の流れ:-
ユーザーがA2セルで都道府県を選ぶ
-
D列に対応する市区町村一覧がFILTER関数で表示される
-
VBAがD列の表示範囲を読み取り、B2セルの入力規則に設定
以下のVBAコードを、対象のシートのコードモジュールに貼り付けます:
Private Sub Worksheet_Change(ByVal Target As Range) ' 都道府県が入力されたときのみ処理 If Target.Address = "$A$2" Then Dim ws As Worksheet Set ws = Me ' このコードが貼られているシートを対象 ' FILTER結果が表示される列(例:D列) Dim startCell As Range Set startCell = ws.Range("D2") ' FILTER結果の最終行を取得(空白まで) Dim lastCell As Range Set lastCell = startCell.End(xlDown) ' スピル範囲の終了地点を確認 If IsEmpty(lastCell.Value) Then Set lastCell = startCell End If ' プルダウン設定対象(B2)の入力規則を更新 With ws.Range("B2").Validation .Delete ' 既存の入力規則を削除 .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Formula1:="=$D$2:$D$" & lastCell.Row .IgnoreBlank = True .InCellDropdown = True End With End If End Sub コードの補足ポイント 処理内容 説明 Worksheet_Change A2セルの変更時に自動発動 .End(xlDown) D列のスピル範囲の終わりを探す .Validation.Add 入力規則をB2セルに設定(FILTER結果を範囲として使用) VBA設定の準備手順-
Alt + F11 でVBAエディターを開く
-
対象のシート(例:「フォーム」)をダブルクリック
-
上記コードを貼り付けて保存
-
Excelに戻ってA2セルを操作して動作を確認
図の例ではD2セルに上記の関数を設定しています。
またはシンプルな例:
=FILTER(B2:B100, A2:A100=A2, "該当なし")次章では、FILTER+VBAを使った連動制御の応用ポイントや注意点について詳しく解説していきます。
FILTER+VBA連携の応用ポイントと注意点
FILTER関数とVBAを組み合わせれば、従来のINDIRECTや名前定義よりも柔軟性の高い連動プルダウンを実現できます。しかし、実務で活用するにはいくつかのポイントと注意点を押さえておく必要があります。
✅ 応用ポイント①:複数行に展開して使う商品明細やアンケートのように、複数行で同じ仕組みを使いたい場合は、以下のように工夫します。
-
各行の都道府県セル(例:A2:A10)に対して
-
対応するFILTER結果を別列に出力(例:D列〜)
-
VBAで行ごとにスピル範囲を参照し、隣のセルに入力規則を設定
FILTER結果が「別シート」にある場合、VBAでは以下のようにフルパス指定で処理すれば対応できます。
Set startCell = ThisWorkbook.Sheets("データ").Range("D2")ただし、入力規則の元の値に別シートのセル範囲は直接指定できないため、VBAで一時的にコピー or 中継セルに転記する必要があります。
✅ 応用ポイント③:複数条件によるFILTER抽出たとえば「都道府県」と「カテゴリ」のように、複数の条件で抽出リストを制御したい場合は、以下のように書けます:
=FILTER(商品一覧[商品名], (商品一覧[都道府県]=A2)*(商品一覧[カテゴリ]=B2)→ AND条件(両方に一致)で動的リストを抽出できます。
⚠ 注意点①:入力規則の上書きに注意-
VBAの実行で入力規則が都度上書きされるため、 フォーム入力後に再選択が必要になるケースがある
-
対策として「1回限り設定」や「編集保護」を導入することも検討
-
VBAを使っているため、マクロ無効モードでは動作しない
-
対策:環境制限がある場合は「FILTER+転記+簡易選択」で対応する別パターンを用意
FILTER関数は「見せる力」に優れ、VBAは「制御する力」に優れています。この2つを組み合わせることで、自由度の高い実務向けの連動プルダウンが構築できるようになります。
FILTER関数×VBAで柔軟な連動リストを作成しよう!
ExcelのFILTER関数は、条件に応じたデータ抽出を瞬時に行える、非常に強力なツールです。しかし、FILTER関数だけではそのまま入力規則に反映させることができないという弱点があります。
そこで本記事では、FILTER関数とVBA(マクロ)を組み合わせることで、「条件に応じて、ドロップダウンの選択肢を自動で切り替える仕組み」を実現する方法を解説しました。
本記事で紹介したポイントをおさらい-
FILTER関数の基本構文と使い方
-
入力規則ではFILTERの出力が使えない理由
-
VBAでFILTER結果を取得してドロップダウンに反映する方法
-
複数行・複数条件・別シート対応の応用テクニック
-
Excelフォームの入力効率を上げたい方
-
フィルタされた内容に応じて選択肢を切り替えたい方
-
INDIRECTでは管理しきれなくなってきた中〜上級ユーザー
FILTER関数とVBAを組み合わせれば、従来の「名前の定義+INDIRECT」では難しかった柔軟な連動プルダウンもスムーズに構築できます。
実際の業務フォームや申請シート、アンケート、見積作成など、さまざまな場面で活用できるテクニックですので、ぜひ試してみてください!
【関連記事】- Excelドロップダウンリストの基本とトラブル対処法まとめ|表示されない・複数列表示・行数制限など
- VLOOKUP×ドロップダウンリストの連携術|商品名を選ぶだけで価格を自動表示!
- Excel連動プルダウンの活用事例まとめ|申請書・発注書で役立つ入力効率アップ術!
- 【できるExcel関数 Copilot対応 Office】(Amazon)
- 【逆引き!Excel実務ワザ大全 増補新版】(Amazon)
※本ボックスにはアフィリエイトリンク(PR)が含まれます。 くわしくは プライバシーポリシー へ。
- フォローする
- Prev 2025年4月23日 Excel連動プルダウンの活用事例まとめ|申請書・発注書で役立つ入力効率アップ術!
- Next 2025年4月25日 Excelドロップダウンリストの基本とトラブル対処法まとめ|表示されない・複数列表示・行数制限など