PR

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

Thumbnail for エクセルのデータベース検索システムの作り方|複数条件もFILTER関数で!
  • 「検索条件を変えるたびに手動の繰り返しで面倒…」
  • 「入力欄と連動する検索システムをExcelで作りたい…」

Excel(エクセル)のデータベースを検索するには、「検索機能(Ctrl+F)や「オートフィルター」が手軽です。ただし、セルへの入力と連動して結果が自動で切り替わるような 検索システム/検索エンジンを自作する のであれば、FILTER関数 が適しています。

本記事では、Excelにおけるデータベースの検索方法の比較・使い分けと、FILTER関数を使った検索システムの作り方を解説します。

※ 本記事では「データベース=テーブル」として扱います(データベースが1つのテーブルのみで構成されていると仮定)

比較・整理|データベースの検索方法

Excelのデータベースを検索する方法は複数あります。手法ごとの機能やデメリットをまとめると以下の通りです。

 

比較表:各手法の機能・欠点一覧

手法デメリット部分一致多条件全文検索UI・自動視認・保護
検索機能(Ctrl+F)一覧性に乏しい
オートフィルター多数の手動操作が必要
FILTER関数(単体)最新のExcel(M365等)以外で動かない
FILTER関数+SEARCH/ISNUMBER同上+数式が長くなり可読性が低下

データベースのデータを利用する目的で抽出する場合には、VLOOKUP、XLOOKUP関数やPower Queryも有効です。

評価項目の意味は次で補足します。

 

検索システムにあると便利な機能

Excelで検索を行う際、あると便利な機能には以下の5つがあります。

  • 部分一致 :キーワードの一部を入力するだけで、該当するデータを探せる機能。正確な名称を覚えていなくても 検索できる。
  • 多条件 :「AかつB」のように 複数の条件を掛け合わせて 絞り込む機能。
  • 全文検索 :特定の列だけでなく、 表全体から目的の文字を一度に 探せる機能(複数列横断検索)
  • UI・自動 :セルに文字を入力すると、 検索結果が自動で更新される 仕組み。
  • 視認・保護 :元データを壊さず、 抽出結果を別の場所に表示 して見やすくできる機能。
 

使い分けの目安

目的に応じてどの検索方法を選ぶべきか、具体的な使い分けの目安は以下の通りです。

ただし、FILTER関数はMicrosoft 365などの新しいExcelでしか使用できません。古いExcelには対応していない点に注意してください。

標準UI機能|手軽に検索する方法

Excelには「 検索機能と「 オートフィルター機能という標準搭載されている機能があります。システム構築の手間も不要で、手軽にすぐ使用できるのが大きなメリットです。特にこだわりがなければ、これらの機能で十分なことも多いです。

 

機能1:検索機能(Ctrl+F)

[検索と置換] ダイアログを使った検索方法です。事前設定なしで、すぐに使えます。シート内またはブック内の全セルから、特定の文字列を探せます。置換(一括で文字列を別の文字に変換)する機能も備わっています。

基本の検索方法

  1. Ctrl + F を押します(または [ホーム] タブ → [検索と選択][検索]「検索と置換」ダイアログが表示されます。
  2. 「検索する文字列」欄にキーワードを入力します。
  3. [次を検索] ボタンを押すと、該当するセルへ移動します。
  4. [すべて検索] ボタンを押すと、該当するセルの一覧が表示されます。
検索機能の「すべて検索」
吉峰
吉峰

事前にセルを範囲選択しておくと、その範囲でのみ検索がかけられます。

応用:あいまい検索(ワイルドカード)と書式指定

[セル内容が完全に同一であるものを検索する] のチェックが外れている状態では 部分一致検索チェックが入った状態では 完全一致検索 になります。

ワイルドカード も使用可能です。

  • アスタリスク(* :任意の文字列(文字数不問)を表す
  • クエスチョン(? :任意の1文字を表す

セル書式を指定して検索する方法もあります。例えば「黄色に塗りつぶされたセルだけを検索する」といった使い方が可能です。

主なデメリット・課題

手軽に使える検索機能ですが、実務で使用する際には以下のような課題・制約があります。

  • 該当セルへジャンプする仕組みのため、データ全体を俯瞰しづらい
  • 複雑な 複数条件の指定ができない
  • 検索結果を 別の場所へまとめて出力できない
 

機能2:オートフィルター機能

オートフィルターは、特定の条件に合う行だけを表示する機能です。列ごとに絞り込めるので、少し複雑な条件指定ができます。操作方法がわかりやすいのも特徴です。

オートフィルターの実装方法

列見出しの右側にフィルターボタン(を表示させる方法は2つあります。

  • 方法1:テーブル化する[挿入] タブの [テーブル] (ショートカット: Ctrl + T
  • 方法2:テーブル化せずにフィルターボタンを追加[データ] タブの [フィルター] をクリック

検索方法

  1. フィルターボタン(をクリック。
  2. 検索ボックスに文字を入力し [OK] をクリックすると、 部分一致で行が抽出 される。

複数列のフィルターボタンを操作することで、条件を組み合わせた絞り込みも可能です。表示を元に戻す場合は、 [フィルターボタン] > ["○○" からフィルターをクリア] で絞り込み条件をクリアすれば、元の全データが再表示されます。

1列で複数条件を指定する

[フィルターボタン] > [テキストフィルター] > [ユーザー設定フィルター] から、 [カスタムオートフィルター] ダイアログが表示され、AND/ORの複数条件検索も可能です。

主なデメリット・課題

  • 抽出状態のままコピー&ペーストすると、 意図しないデータ範囲を操作するミス が起きやすい
  • 絞り込みの解除や再設定のたびに 手動での繰り返し操作 が発生する
  • 全列を対象にした 全文検索ができない

TIPS:スライサーの活用

スライサー は、ボタンをクリックするだけでデータを絞り込める機能です。オートフィルターの一部機能をより使いやすくでき、繰り返しの手動操作が減らせます。使用するには テーブル化が必要 です。

関数活用|FILTER関数を活用した検索システムの作り方

ここからは、 FILTER関数 を使って検索システムを作る手順を説明します。

検索システムを自作すると、標準機能のように毎回手動でメニューを開いて絞り込む手間がなくなり、元のデータの表示を維持したまま、必要な情報だけを別の場所に分かりやすく抽出できます。

 

前準備:データベースの作成

FILTER関数で検索システムを作る前に、データベースを「 テーブルに変換しておくと便利です。

吉峰
吉峰

テーブル化すると 構造化参照 が使えるようになり、数式の可読性が上がります。参照範囲もデータの追加に応じて自動拡張されます。

テーブル化の手順は以下の通りです。

  1. 対象のデータ範囲を選択し、 Ctrl + T を押す
  2. [テーブルデザイン] タブでテーブル名を設定する
テーブルデザインタブで、任意のテーブル名を指定

以降の数式例では、次のテーブルを使用します。

テーブル名:M_商品

商品コード商品名カテゴリ在庫状況
A001ノートパソコン Pro家電在庫あり
A002ワイヤレスマウス残りわずか
B001デスクチェア家具在庫あり
B002折りたたみデスク入荷待ち
C0013色ボールペン文具在庫あり
C002コピー用紙 A4
 

関数の使い方:FILTERの構文

FILTER関数の構文は以下の通りです。

FILTER関数の構文
=FILTER(配列, 条件, [空の場合])
excel
  • 第1引数(配列) :抽出対象のデータ範囲(データベースのテーブルなど)を指定する
  • 第2引数(条件) :一致させたい条件式を入力する
  • 第3引数(空の場合) :条件に合うデータがない場合に表示する代替値を設定できる(省略可)

数式例:=FILTER(M_商品, M_商品[商品名]=$C$3, "該当なし")

※ セル C3 を検索キーワードの入力欄として使用。ここでは検索範囲を「商品名」列のみとする。

入力欄となるセルをあらかじめ用意しておけば、 入力内容を変えるだけで検索結果が自動で切り替わる 仕組みを作れます。

複数条件(AND/OR)への対応

FILTER関数の 条件 引数では、複数の条件式を演算子でつなぐことで、AND条件やOR条件を設定できます。

  • AND条件(「~かつ~」 :条件式同士を *(掛け算)でつなぐ
=FILTER(配列, (条件1)*(条件2), [空の場合])
excel
  • OR条件(「~または~」 :条件式同士を +(足し算)でつなぐ
=FILTER(配列, (条件1)+(条件2), [空の場合])
excel

入力欄を複数設ければ、各欄の条件を掛け合わせた詳細な絞り込みが可能です。

AND条件での「入力欄が空のとき」の対処

AND条件(*で複数の入力欄を使う場合、どれか1つでも空の入力欄があると何もマッチしなくなります。
対処として、各条件式に「入力欄が空文字の場合はTRUE」となるOR条件を追加します。

条件式の例:(条件) + (入力欄="")

 

関数の組合せ:全文+部分一致検索に対応

FILTER関数単体での検索では、完全一致の検索が行われます。SEARCH関数ISNUMBER関数 を組み合わせることで、 部分一致検索が可能 になるだけでなく、 全文検索も実現 できます。

=FILTER(
    配列, 
    ISNUMBER(
        SEARCH(検索文字, 列1 & 列2 & ...)
        ), 
    [空の場合]
    )
excel

数式例:=FILTER(M_商品, ISNUMBER(SEARCH($C$3,M_商品[商品コード] & M_商品[商品名] & M_商品[カテゴリ] & M_商品[在庫状況])), "該当なし")

※ セル C3 を検索キーワードの入力欄として使用。検索範囲は M_商品 の全列。

FILTER関数にSEARCH関数・ISNUMBER関数を組み合わせた全文+部分一致検索

この数式は一見すると複雑ですが、「部分一致検索」と「複数列をまとめた全文検索」という2つの仕組みを組み合わせています。それぞれの具体的な動作について解説します。

部分一致の実装:SEARCH関数 + ISNUMBER関数

部分一致検索は、SEARCH関数とISNUMBER関数の組み合わせで実装します。

  1. 「検索文字列がセル内のどの位置にあるか」を SEARCH関数 が数値で返す(見つかった場合のみ)
  2. 数値が得られた(検索文字列が見つかった)場合、 ISNUMBER関数 が TRUE を返す
  3. 上記の複合数式をFILTER関数の条件式に指定する

SEARCH関数ではワイルドカード(*?も使用可能です。

吉峰
吉峰

SEARCH関数の検索文字列が空文字の場合は、数値(1)が返ります。つまり、キーワード未入力の状態ではISNUMBERが常にTRUE となり、全データが表示されます。

全文検索の実装:&で文字列結合

全列を対象にした全文検索は、 & 演算子で検索対象の列を結合して実現します。すべての列の文字列を1つに結合した上で、SEARCH関数による部分一致検索を行います。

まれに「データには存在しないキーワード」がマッチする

上記の方法では各列のセル値を単純に結合しているため、「結合したことによって作られる文字列」がキーワードとしてマッチする可能性(バグ)があります。

例)A10プリンターを結合 → 10プリン でマッチしてしまう

これを避けたければ、結合する文字列の間に適当な記号などを入れる必要があります

例)

  • バグありM_商品[商品コード] & M_商品[商品名]
  • バグなしM_商品[商品コード] & "_" & M_商品[商品名]
吉峰
吉峰

データベースの項目(列)が増えた場合は、数式内の結合対象に新しい列を追加する必要がある点はデメリットです。列数が多いほど数式は長くなります。

注意点|FILTER関数を使った検索システムのデメリット

FILTER関数を使った検索システムには、以下のデメリットがあります。

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

まとめ|FILTER関数を活用して効率的な検索エンジンを作ろう

本記事の要点は以下の3点です。

  • 使い分け
  • FILTER関数を使った検索システム :セルに条件を入力するだけで検索結果が自動更新される仕組みを作れる。手動操作の手間を減らし、複雑な検索条件にも対応可能。
  • 全文+部分一致検索の実装方法 :FILTER関数にISNUMBER関数とSEARCH関数を組み合わせる。
吉峰
吉峰

FILTER関数はMicrosoft 365など新しいExcelでのみ動作します。検索システムを自作する場合は、事前にExcelのバージョンを確認してください。

Excelで本格的なデータベース(疑似リレーショナルデータベース)を構築する方法については、以下の記事で解説しています。