エクセルのあいまい検索で複数を抽出!条件に合うデータを素早く見つける

[PR]

たとえば膨大な商品リストから「ねじ」「ワイヤレス」などのキーワードを含む行をすべて取り出したい場面、エクセルで効率的にデータ抽出する方法をご存じですか。FILTER関数、SEARCH/FIND、Power Queryのあいまいマージなどを使うことで、検索ワードに完全一致しなくても複数のヒットを素早く抽出可能です。ここでは最新情報をもとに、あいまい検索+複数抽出を実現する具体的な方法を網羅的に解説します。

エクセル あいまい検索 複数 抽出 の基本理解と目的

エクセルで「あいまい検索 複数 抽出」を行う目的は、特定の文字列を完全には一致しなくても“含む”“似ている”データを漏らさず抽出し、一覧で確認したいというニーズです。業務での在庫管理、住所や名前の誤記、バリエーションのある入力データなどで有効です。

あいまい検索とは、完全一致ではない部分一致や類似文字列の判定を含んだ検索方式です。複数抽出とは、その条件に当てはまる複数行を一括で取り出す操作を指します。この組み合わせにより、見逃しが減り、後処理や検証の手間が大幅に削減できます。

なぜあいまい検索+複数抽出が必要か

たとえば、人手入力のデータベースでは表記ゆれ(全角半角、ひらがな・カタカナ・漢字の混在)や誤字が頻出します。完全一致検索では見落とすデータが多数発生します。複数抽出できれば、該当するすべての行を確認でき、集計やチェックが容易になります。

また、複数条件を組み合わせた検索(AND/OR)や、似た文字列をまとめて扱いたい場面では、標準機能だけでなく高度な関数やPower Queryを利用することが現場では一般的です。

どのバージョンで利用可能か

あいまい検索+複数抽出の機能は、エクセルのバージョンによって使える関数やツールが異なります。エクセル365/2021など最新バージョンではFILTER、XLOOKUP、Power Queryが充実しており、あいまい検索を組み込んだ抽出が容易です。古いバージョンではVLOOKUP+ワイルドカード、COUNTIF/INDEX+MATCHなどの組み合わせで代替します。

用語整理:部分一致・ワイルドカード・類似度

部分一致とは、検索語がセル内のどこかに含まれる文字列を指します。ワイルドカード(たとえば「*」「?」)を使うことで、任意の文字列の前後・中間にキーワードが含まれていることを条件にできます。類似度(similarity)はPower Queryなどで使われる判定基準で、ユーザーが指定する閾値により“似ているか”を数値で判断します。

FILTER/SEARCH/FIND 関数によるあいまい検索と複数抽出

最新のエクセル365等では、FILTER関数を使って特定のキーワードを含む行をすべて抽出できるようになっています。ただしFILTER単体ではワイルドカードが使えないため、SEARCH/FIND関数と組み合わせることで部分一致の条件を与える形式が一般的です。

例えば「商品名」という列に「ねじ」を含む行を抽出する例では、以下のような数式を使います。SEARCH関数で文字列の位置を確認し、ISNUMBERで数値かどうかを判定、それをFILTERの条件とする方法です。こうすることで一致するものを複数取り出せます。

基本の組み立て例:SEARCH+FILTER

以下のような数式が典型例です。
=FILTER(取得範囲, ISNUMBER(SEARCH(“キーワード”, 検索範囲)), “該当なし”)
この式では、検索範囲内に「キーワード」が含まれているセルをTRUEとし、取得範囲の対応する行をすべて抽出します。

SEARCHは大文字小文字を区別せずに検索可能ですが、FINDは区別します。使い分けによって意図するあいまい検索の範囲が変わります。

ワイルドカード利用の代替手法

FILTER関数自体はワイルドカードに直接対応していないため、VLOOKUPやCOUNTIFを使ってワイルドカード検索を行うことがあります。COUNTIF(検索範囲, “*キーワード*”) の形式で“contains”検索を行い、その結果をIF関数やINDEX+SMALL関数で複数行に展開する手法です。

INDEX / MATCH / SMALL を使った複数抽出

古いバージョンやFILTERが利用できない環境では、INDEX+MATCH+SMALLなどを組み合わせて複数行を取得する方法があります。まず「どの行が一致するか」をROW関数などで取得し、SMALLで順に抽出、その番号をINDEXで参照するという流れです。少し数式が複雑になりますが、確実に部分一致+複数抽出できます。

Power Query のあいまいマージで柔軟に複数抽出する方法

Power Queryには“あいまいマージ(fuzzy merge)”という機能があります。これは複数のテーブルを統合する際、テキスト列を完全一致ではなく類似度で結びつけるものです。誤字・表記ゆれにも対応しつつ、複数行のマッチング結果を取得でき、データのクリーニングや統合処理に威力を発揮します。

ユーザーはマージ操作で fuzzy matching を有効にし、類似度の閾値、最大マッチ数、ケースの無視、大文字小文字の違いの許容などを設定できます。抽出元と統合先のテーブルがあれば、複数抽出結果を含む列として出力可能です。

あいまいマージの設定手順

まず対象データをPower Queryエディタで読み込み、別の参照テーブルや同じテーブルを統合対象としてマージ操作を選択します。その際、テキスト列をキーに設定し、「あいまいマッチを使用する」をチェック。次に類似度しきい値(たとえば0.8など)を設定し、マッチ数を制限しない設定にすることで複数の類似データを取得できます。

応用例:住所データの誤記補正や表記ゆれ対応

表記ゆれがある住所データ(例:東京ととうきょう、大阪市と大阪都など)を統一したい場合、整形前のデータと標準住所リストをマージし、類似度を設定。誤字や異表記を許容することで、標準住所に近いものと統合ビジュアルとして出力できます。これにより複数の入力パターンをひとまとめにできます。

FUZZY.LOOKUP / FUZZY.MATCH アドインによるあいまい検索強化

標準機能では補いきれないケースには、FUZZY.LOOKUP と FUZZY.MATCH を含むアドインが役立ちます。これらは類似検索アルゴリズムを使って、検索語との距離を計算し、最も近い一致を返すものです。複数の検索ワードに対応する配列入力などにも対応しており、あいまい検索+複数抽出を強力にサポートします。

基本的な使い方

このアドインを導入すると、数式で FUZZY.LOOKUP(検索語, 検索範囲, 戻り範囲, 類似閾値) のような形で使えます。戻り範囲から類似度の高いデータを返すので、単一の最良一致だけでなく、複数の一致をスピル(配列形式)で得ることができます。

利用シーンの例

製品名のバリエーション:例「ノートパソコン」「ノート PC」「ノートpc」など、表記に違いがあるが同一製品として扱いたい場合。
誤字・打ち間違いのある入力データの補正:たとえば「テーブルタツプ」「テーブルタップ」という入力を近いものとして補正出力したいとき。

ワイルドカード/複数条件(AND/OR)を組み合わせた抽出方法

複数の条件を組み合わせて抽出したい場合、AND 条件(すべて満たす)または OR 条件(どれかを満たす)を選べます。部分一致検索と組み合わせる場合は、SEARCH/ISNUMBER または COUNTIF を適宜使い分けます。

OR 条件で複数キーワードを含む行を抽出する

たとえば、商品名に「ねじ」または「ネジ」のいずれかが含まれる行を抽出したい場合、FILTER を使って以下のような式を作ります。
=FILTER(取得範囲, (ISNUMBER(SEARCH(“ねじ”, 検索範囲)) + ISNUMBER(SEARCH(“ネジ”, 検索範囲)))>0, “該当なし”)
このように OR の条件を足し算で表現することで、どちらか含む行を複数抽出できます。

AND 条件で複数語をすべて含む行を抽出する

たとえば「ねじ」と「金属」の両方を含む行を抽出したい場合は、掛け算で AND 条件を表現します。
=FILTER(取得範囲, ISNUMBER(SEARCH(“ねじ”, 検索範囲)) * ISNUMBER(SEARCH(“金属”, 検索範囲)), “該当なし”)
このようにすることで、両方一致するものだけが複数抽出されます。

複数列で条件を設定する方法

複数列にまたがる条件、例えば「カテゴリ列に特定語」「価格列に一定以上」など、の AND/OR 抽出も可能です。FILTER 関数の条件引数に複数の論理式を掛け算・足し算で組み合わせます。
たとえば OR と AND が混在する場合は、以下のような論理式になります。
=FILTER(取得範囲, ((ISNUMBER(SEARCH(“ねじ”,カテゴリ列))+ISNUMBER(SEARCH(“ネジ”,カテゴリ列)))>0)*(価格列>=5000), “該当なし”)
これにより、複数の条件を組み合わせて複数行を抽出できます。

トラブルシューティングと実務での注意点

あいまい検索+複数抽出は強力ですが、誤抽出や処理速度に関する問題もありえます。ここではよくあるトラブルとその対策を最新情報を交えて解説します。

誤抽出が多すぎる/ノイズが混じる問題

類似度のしきい値を低く設定しすぎると、本来関連性の低い項目が含まれてしまいます。Power Query の fuzzy merge やアドインでの閾値は 0.8(80%)前後から調整するのが目安です。必要に応じて「変換テーブル」を使って特定語をマッピングすることで不要な誤マッチを減らせます。

処理速度が遅くなるケース

大きなデータ範囲であいまい検索を含む複数抽出を行うと、FILTER 数式の配列処理や Power Query のマージ処理が重くなります。対策としては、対象範囲を絞る、インデックス列を用意する、参照テーブルを使って先に重複を削除するなどがあります。

ワイルドカード使用の制限

FILTER 関数自体はワイルドカードに対応していません。ワイルドカードを使いたい場合は VLOOKUP や COUNTIF を使う方法が代替になります。また、検索語中に特殊文字が含まれる場合はエスケープ処理などを検討します。

文字列の表記ゆれ・大文字小文字の扱い

SEARCH は標準で大文字小文字を区別しないのに対し、FIND は区別します。表記ゆれを無視したい場合は SEARCH を使うか、Power Query で大文字小文字を無視する設定を有効にします。

実践ガイド:例題で学ぶあいまい検索+複数抽出

ここでは具体的なシート構成を想定し、商品一覧表から複数抽出を行う例題で実践します。読み手が手を動かしながら理解できるように具体的な数式を提示します。

例題設定

商品一覧表 (表1):
列A:商品ID 列B:商品名 列C:価格 列D:カテゴリ

キーワードセル E1 に「ねじ」、E2 に「タップ」、E3 に「ネジ」と入力してあり、これらを OR 条件で「商品名」に含む行をすべて抽出したいとします。

FILTER+SEARCH で OR 条件による複数抽出

以下のような数式を F1 セルに入力します。
=FILTER(A:D, (ISNUMBER(SEARCH(E$1, B:B))+ISNUMBER(SEARCH(E$2, B:B))+ISNUMBER(SEARCH(E$3, B:B)))>0, “該当なし”)
この数式では三つのキーワードいずれかを含む商品名を抽出し、該当するすべての列を返します。

AND 条件を組み込む例

E1 に「ねじ」、E2 に「金属」、E3 に空白として、さらに価格が 1000 以下であることを条件とするなら:
=FILTER(A:D, ((ISNUMBER(SEARCH(E$1, B:B))) * (ISNUMBER(SEARCH(E$2, B:B))) * (C:C<=1000)), "該当なし")
このように OR や AND を組み合わせて柔軟な条件設定が可能です。

Power Query で同じ例を実行する手順

1. 商品一覧表をテーブル形式で取り込み。
2. Power Query エディタで別のテーブルとしてキーワードリストを取り込む。
3. メインテーブルとキーワードリストをマージ、あいまいマッチを有効化。
4. 類似度閾値を設定(例 0.8)、必要ならマッチ数を制限しない。
5. マージ後に展開して、あいまいマッチした行をメインテーブル側で抽出。

どの方法を選ぶべきか:比較と選択基準

状況に応じて、どの方法が最適かを見極めることが重要です。以下の表に、それぞれのメリット・デメリットをまとめます。

方法 メリット デメリット
FILTER+SEARCH/FIND 式が簡単でリアルタイム反映。動的配列で複数表示可能。 大規模データで処理が重い。FILTER にワイルドカードが使えない。
INDEX + MATCH + SMALL(古いバージョン対応) バージョン制限が少ない。自由に応用可能。 数式が複雑になりやすい。保守性が低め。
Power Query のあいまいマージ 視覚的操作で多数のマージ設定可能。誤記や表記ゆれに強い。 学習コストあり。処理に時間がかかることがある。
FUZZY.LOOKUP/MATCH アドイン 類似度スコア表示可能。複数一致の抽出に強い。 アドインが必要。組織によって導入制限があることも。

まとめ

「エクセル あいまい検索 複数 抽出」のニーズを満たすには、FILTER+SEARCH/FIND の組み合わせ、INDEX+MATCH/SMALL の応用、Power Query のあいまいマージ、あるいは FUZZY.LOOKUP/MATCH アドインの活用が主力となります。

最新機能が使える環境であれば FILTER 関数を使った部分一致抽出が手軽です。誤記補正や表記ゆれの対応が重要なデータでは、Power Query とあいまいマージを活用すると精度が高くなります。

どの方法を選ぶにも、データ規模、表記ゆれの程度、処理速度の許容範囲を考慮して設定することが重要です。適切に設定すれば、時間と手間を大きく削減でき、データ活用力が飛躍的に高まります。

関連記事

特集記事

コメント

この記事へのトラックバックはありません。

最近の記事
  1. C++でファイルを一括で読み込みするには?効率的なコードの書き方

  2. C#開発向けのXAMLとは?初心者入門におすすめの基本構文と使い方

  3. エクセルで数字の順番を正しく並び替え!思い通りにソートするコツ

  4. C言語で配列の要素数に変数を使用!動的にサイズを確保するテクニック

  5. エクセルで数字の間にスペースを入れる方法!見やすい電話番号の作り方

  6. プログラミングの国家資格の難易度は?取得のメリットと勉強法を解説

  7. PHPのimplodeの使い方!配列を文字列に結合する代わりの関数も解説

  8. Visual Studio CodeでのC++の使い方!環境構築と設定の基本

  9. エクセルで時間の足し算をして60分を超えたら?正しい表示のやり方

  10. WordとExcelの効果的な勉強の方法!初心者からスキルアップ

  11. CSSの親要素とは?子要素を基準にした指定方法とスタイルの当て方を解説

  12. エクセルで文字を縦書きにするやり方!表の見栄えを良くするレイアウト

  13. Keepメモのバックアップのやり方は?大切なデータを確実に守る手順

  14. ノートパソコンのベゼルとは?安全な外し方と液晶交換の基本手順

  15. ワードで右揃えがずれる原因は?文字を綺麗に整えてレイアウトを直す技

  16. Windowsのファンクションキーの設定方法!Fnキーなしで便利に使う術

  17. Visual Studio CodeでのJupyterの使い方!データ分析環境

  18. パソコンのダウンロード先を変更!保存場所がわからない悩みを解決

  19. C言語とは?構造体と配列の初期化の方法を初心者向けに徹底解説

  20. VisualStudioでのXSDの使い方!スキーマ定義の基本を解説

TOP
CLOSE