【Excel】タグ・カンマ区切りデータから全件抽出する方法|FILTER×SEARCH活用術
「VLOOKUPで検索したら1件しか取れなかった」「手動でフィルターするのが限界になってきた」——そんな経験はありませんか?
商品タグや分類コードが1つのセルにカンマ区切りで入っているデータから、条件に合う全レコードを一瞬で抽出したいとき、Excelの標準機能だけでは意外と詰まりがちです。
この記事を読むと、SEARCH・ISNUMBER・FILTER・TEXTJOINの4関数を組み合わせて、部分一致による全件抽出を自動化できるようになります。セル参照で検索キーワードを動的に切り替える応用まで、ステップごとに丁寧に解説します。
今回解決する問題
以下のようなデータを例に使います。
| A列(商品名) | B列(タグ) |
|---|---|
| リンゴジュース | フルーツ, ドリンク, 甘い |
| バナナケーキ | フルーツ, スイーツ, 甘い |
| 緑茶 | ドリンク, 渋い, 和風 |
| イチゴタルト | フルーツ, スイーツ, 酸っぱい |
| コーヒー | ドリンク, 苦い |
やりたいこと:「フルーツ」タグを含む商品を全件抽出する。
B列の各セルには複数のタグが混在しているため、完全一致では対応できません。部分一致で全件ヒットさせるのが今回のポイントです。
完成数式(先に全体像を確認)
まず完成形を見ておきましょう。
=FILTER(A2:A6, ISNUMBER(SEARCH("フルーツ", B2:B6)), "該当なし")
この1行で、B列に「フルーツ」を含む行のA列データを全件スピル(自動展開)して取り出せます。各関数の役割を理解した上でステップごとに組み立てていきます。
使用する4関数の役割
| 関数 | 役割 |
|---|---|
| SEARCH | 文字列が含まれる位置(数値)を返す。見つからなければエラー |
| ISNUMBER | 数値ならTRUE、エラーならFALSEに変換 |
| FILTER | TRUEの行だけを全件抽出 |
| TEXTJOIN | 抽出結果を1セルにまとめる(任意) |
FILTER関数はExcel 365 / Excel 2021以降で使用可能です。旧バージョンをお使いの場合は記事末尾の注意点をご覧ください。
ステップ別:数式の組み立て方
ステップ1|SEARCH+ISNUMBERで一致を判定する
=ISNUMBER(SEARCH("フルーツ", B2:B6))
SEARCH はキーワードが見つかると位置を示す数値を返し、見つからなければ #VALUE! エラーを返します。ISNUMBER はその結果を TRUE/FALSE に変換します。
返ってくる配列:
{TRUE; TRUE; FALSE; TRUE; FALSE}
B2(リンゴジュース)・B3(バナナケーキ)・B5(イチゴタルト)が「フルーツ」を含むため TRUE になっています。
ステップ2|FILTERで該当行を全件抽出する
=FILTER(A2:A6, ISNUMBER(SEARCH("フルーツ", B2:B6)), "該当なし")
FILTER の第2引数にステップ1の判定式をそのまま渡します。TRUE の行だけがA列から取り出されます。
抽出結果:
リンゴジュース バナナケーキ イチゴタルト
第3引数 "該当なし" は一致件数がゼロだったときの表示テキストです。省略するとエラーになるため、必ず指定しておくことをおすすめします。
ステップ3|TEXTJOINで1セルにまとめる(任意)
レポートやダッシュボードで「○○タグの商品:〇〇、〇〇、〇〇」のように1行で表示したい場合は TEXTJOIN で囲みます。
=TEXTJOIN("、", TRUE, FILTER(A2:A6, ISNUMBER(SEARCH("フルーツ", B2:B6)), ""))
出力結果:
リンゴジュース、バナナケーキ、イチゴタルト
第2引数の TRUE は空白セルを無視する設定です。FILTERが返す空文字を自動的に読み飛ばしてくれます。
応用:検索キーワードをセル参照に変える
キーワードを数式にハードコードする代わりに、セル参照にするとインタラクティブな検索シートが作れます。
たとえば E1 に検索ワードを入力するようにして:
=FILTER(A2:A6, ISNUMBER(SEARCH(E1, B2:B6)), "該当なし")
E1 の値を「ドリンク」に変えるだけで、タグにドリンクを含む商品がリアルタイムで切り替わります。ドロップダウンリストと組み合わせれば、クリック1つで絞り込める検索UIが完成します。
注意点とトラブルシューティング
FILTER関数が使えない環境の場合
Excel 2019以前・古いExcel for Macでは FILTER は利用不可です。IFERROR と INDEX を組み合わせた配列数式(Ctrl+Shift+Enterで確定)で代替できますが、数式が複雑になります。業務で頻繁に使うなら Microsoft 365へのアップグレードを検討する価値があります。
大文字・小文字を区別したいとき
SEARCH は大文字・小文字を区別しません。英語キーワードで厳密に区別したい場合は FIND に置き換えてください。
=ISNUMBER(FIND("Apple", B2:B6))
空白セルが範囲に含まれる場合
対象範囲に空白セルがあると SEARCH がエラーを返すことがあります。以下のようにガード条件を加えておくと安全です。
=ISNUMBER(SEARCH(E1, IF(B2:B6="", " ", B2:B6)))
まとめ
今回紹介した構成を整理します。
ISNUMBER(SEARCH(...))でタグ列に対する部分一致フラグを生成FILTERにそのフラグを渡して全件抽出- 必要なら
TEXTJOINで1セルに結合 - キーワードをセル参照にすれば動的な検索UIに発展
VLOOKUPでは「1件だけ」しか取れなかった処理が、この組み合わせで全件・自動・動的に変わります。タグや複数キーワードが詰め込まれたデータを日常的に扱う方は、ぜひ今日の業務から取り入れてみてください。
次のステップとして、複数キーワードのOR検索(「フルーツ」または「スイーツ」を含む行を抽出)にも挑戦してみましょう。SUMPRODUCT と組み合わせた応用テクニックは別記事で詳しく解説しています。