エクセルのデータベース検索システムの作り方|複数条件もFILTER関数で!

- 「検索条件を変えるたびに手動の繰り返しで面倒…」
- 「入力欄と連動する検索システムをExcelで作りたい…」
Excel(エクセル)
本記事では、
※ 本記事では「データベース=テーブル」
目次
Excelのデータベースを検索する方法は複数あります。
比較表:各手法の機能・欠点一覧
| 手法 | デメリット | 部分一致 | 多条件 | 全文検索 | UI・自動 | 視認・保護 |
|---|---|---|---|---|---|---|
| 検索機能(Ctrl+F) | 一覧性に乏しい | ✅ | ✅ | ✅ | ❌ | ❌ |
| オートフィルター | 多数の手動操作が必要 | ❌ | ||||
| FILTER関数(単体) | 最新のExcel(M365等) | ❌ | ✅ | ✅ | ||
| FILTER関数+SEARCH/ISNUMBER | 同上+数式が長くなり可読性が低下 | ✅ | ✅ |
データベースのデータを利用する目的で抽出する場合には、
評価項目の意味は次で補足します。
検索システムにあると便利な機能
Excelで検索を行う際、
- 部分一致 :キーワードの一部を入力するだけで、
該当するデータを探せる機能。 正確な名称を覚えていなくても 検索できる。 - 多条件 :「AかつB」
のように 複数の条件を掛け合わせて 絞り込む機能。 - 全文検索 :特定の列だけでなく、
表全体から目的の文字を一度に 探せる機能(複数列横断検索) 。 - UI・自動 :セルに文字を入力すると、
検索結果が自動で更新される 仕組み。 - 視認・保護 :元データを壊さず、
抽出結果を別の場所に表示 して見やすくできる機能。
使い分けの目安
目的に応じてどの検索方法を選ぶべきか、
- シートやブック全体で該当する項目があるか確認したい → 検索機能(Ctrl+F)
- 該当行を抽出したい / 列ごとに絞り込みたい → オートフィルター
- 条件をセルに入力し、
結果がセルに自動出力される検索システムを自作したい → FILTER関数+α
ただし、
Excelには「 検索機能 」
機能1:検索機能(Ctrl+F)
[検索と置換] ダイアログを使った検索方法です。
基本の検索方法
- Ctrl + F を押します(または [ホーム] タブ → [検索と選択] → [検索] )
。 「検索と置換」 ダイアログが表示されます。 - 「検索する文字列」
欄にキーワードを入力します。 - [次を検索] ボタンを押すと、
該当するセルへ移動します。 - [すべて検索] ボタンを押すと、
該当するセルの一覧が表示されます。

事前にセルを範囲選択しておくと、
応用:あいまい検索(ワイルドカード) と書式指定
[セル内容が完全に同一であるものを検索する] のチェックが外れている状態では 部分一致検索 、
ワイルドカード も使用可能です。
- アスタリスク(*)
:任意の文字列(文字数不問) を表す - クエスチョン(?)
:任意の1文字を表す
セル書式を指定して検索する方法もあります。
主なデメリット・課題
手軽に使える検索機能ですが、
- 該当セルへジャンプする仕組みのため、
データ全体を俯瞰しづらい - 複雑な 複数条件の指定ができない
- 検索結果を 別の場所へまとめて出力できない
機能2:オートフィルター機能
オートフィルターは、
オートフィルターの実装方法
列見出しの右側にフィルターボタン(▼)
- 方法1:テーブル化する : [挿入] タブの [テーブル] (ショートカット: Ctrl + T )
- 方法2:テーブル化せずにフィルターボタンを追加 : [データ] タブの [フィルター] をクリック
検索方法
- フィルターボタン(▼)
をクリック。 - 検索ボックスに文字を入力し [OK] をクリックすると、
部分一致で行が抽出 される。
複数列のフィルターボタンを操作することで、
1列で複数条件を指定する
[フィルターボタン] > [テキストフィルター] > [ユーザー設定フィルター] から、
主なデメリット・課題
- 抽出状態のままコピー&ペーストすると、
意図しないデータ範囲を操作するミス が起きやすい - 絞り込みの解除や再設定のたびに 手動での繰り返し操作 が発生する
- 全列を対象にした 全文検索ができない
TIPS:スライサーの活用
スライサー は、
ここからは、
検索システムを自作すると、
前準備:データベースの作成
FILTER関数で検索システムを作る前に、

テーブル化すると 構造化参照 が使えるようになり、
テーブル化の手順は以下の通りです。
- 対象のデータ範囲を選択し、
Ctrl + T を押す - [テーブルデザイン] タブでテーブル名を設定する
以降の数式例では、
テーブル名:M_商品
| 商品コード | 商品名 | カテゴリ | 在庫状況 |
|---|---|---|---|
| A001 | ノートパソコン Pro | 家電 | 在庫あり |
| A002 | ワイヤレスマウス | 残りわずか | |
| B001 | デスクチェア | 家具 | 在庫あり |
| B002 | 折りたたみデスク | 入荷待ち | |
| C001 | 3色ボールペン | 文具 | 在庫あり |
| C002 | コピー用紙 A4 |
関数の使い方:FILTERの構文
FILTER関数の構文は以下の通りです。
=FILTER(配列, 条件, [空の場合])- 第1引数(配列)
:抽出対象のデータ範囲(データベースのテーブルなど) を指定する - 第2引数(条件)
:一致させたい条件式を入力する - 第3引数(空の場合)
:条件に合うデータがない場合に表示する代替値を設定できる(省略可)
数式例:=FILTER(M_商品, M_商品[商品名]=$C$3, "該当なし")
※ セル C3 を検索キーワードの入力欄として使用。
入力欄となるセルをあらかじめ用意しておけば、
複数条件(AND/OR) への対応
FILTER関数の 条件 引数では、
- AND条件(「~かつ~」
) :条件式同士を *(掛け算) でつなぐ
=FILTER(配列, (条件1)*(条件2), [空の場合])- OR条件(「~または~」
) :条件式同士を +(足し算) でつなぐ
=FILTER(配列, (条件1)+(条件2), [空の場合])入力欄を複数設ければ、
AND条件での「入力欄が空のとき」
AND条件(*)
対処として、
条件式の例:(条件) + (入力欄="")
関数の組合せ:全文+部分一致検索に対応
FILTER関数単体での検索では、
=FILTER(
配列,
ISNUMBER(
SEARCH(検索文字, 列1 & 列2 & ...)
),
[空の場合]
)数式例:=FILTER(M_商品, ISNUMBER(SEARCH($C$3,M_商品[商品コード] & M_商品[商品名] & M_商品[カテゴリ] & M_商品[在庫状況])), "該当なし")
※ セル C3 を検索キーワードの入力欄として使用。
この数式は一見すると複雑ですが、
部分一致の実装:SEARCH関数 + ISNUMBER関数
部分一致検索は、
- 「検索文字列がセル内のどの位置にあるか」
を SEARCH関数 が数値で返す(見つかった場合のみ) - 数値が得られた(検索文字列が見つかった)
場合、 ISNUMBER関数 が TRUE を返す - 上記の複合数式をFILTER関数の条件式に指定する
SEARCH関数ではワイルドカード(* や ?)

SEARCH関数の検索文字列が空文字の場合は、
全文検索の実装:&で文字列結合
全列を対象にした全文検索は、
まれに「データには存在しないキーワード」
上記の方法では各列のセル値を単純に結合しているため、
例)
これを避けたければ、
例)
- バグあり : M_商品[商品コード] & M_商品[商品名]
- バグなし : M_商品[商品コード] & "_" & M_商品[商品名]

データベースの項目(列)
FILTER関数を使った検索システムには、
- 古いExcelでは使えない :FILTER関数はMicrosoft 365やExcel 2021以降で導入された関数であり、
Excel 2019以前のバージョンでは動作しない。 - テーブルの中には出力できない :FILTER関数の結果はスピル(自動展開)
で出力されるが、 テーブルの内部ではスピルが使えない。 これにより下記のようにテーブルのメリットが得られない。 - 条件付き書式の設定範囲を自動拡張させることができない
- 検索結果をそのまま関数やPower Queryで 再利用するのが困難。
検索結果を別の用途で使いたい場合は、 手動でのコピー&ペーストが現実的な方法となる。
本記事の要点は以下の3点です。

FILTER関数はMicrosoft 365など新しいExcelでのみ動作します。
Excelで本格的なデータベース(疑似リレーショナルデータベース)



