doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

【Excel】タグ・カンマ区切りデータから全件抽出する方法|FILTER×SEARCH活用術

スポンサーリンク


【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 は利用不可です。IFERRORINDEX を組み合わせた配列数式(Ctrl+Shift+Enterで確定)で代替できますが、数式が複雑になります。業務で頻繁に使うなら Microsoft 365へのアップグレードを検討する価値があります。

大文字・小文字を区別したいとき

SEARCH は大文字・小文字を区別しません。英語キーワードで厳密に区別したい場合は FIND に置き換えてください。

=ISNUMBER(FIND("Apple", B2:B6))

空白セルが範囲に含まれる場合

対象範囲に空白セルがあると SEARCH がエラーを返すことがあります。以下のようにガード条件を加えておくと安全です。

=ISNUMBER(SEARCH(E1, IF(B2:B6="", " ", B2:B6)))

まとめ

今回紹介した構成を整理します。

  1. ISNUMBER(SEARCH(...)) でタグ列に対する部分一致フラグを生成
  2. FILTER にそのフラグを渡して全件抽出
  3. 必要なら TEXTJOIN で1セルに結合
  4. キーワードをセル参照にすれば動的な検索UIに発展

VLOOKUPでは「1件だけ」しか取れなかった処理が、この組み合わせで全件・自動・動的に変わります。タグや複数キーワードが詰め込まれたデータを日常的に扱う方は、ぜひ今日の業務から取り入れてみてください。

次のステップとして、複数キーワードのOR検索(「フルーツ」または「スイーツ」を含む行を抽出)にも挑戦してみましょう。SUMPRODUCT と組み合わせた応用テクニックは別記事で詳しく解説しています。