エクセルで特定の文字を含む行・セルを抽出|FILTER関数

Excelで特定文字を含む行を自動抽出するFILTER関数の使用例

エクセルで「営業」などの特定の文字を含む行をまとめて取り出すには、FILTER関数とISNUMBER・SEARCH関数を組み合わせます。下の例では、部署がB列、取り出す表がA~C列です。

無料Excelサンプルで、まず試してみる
検索する文字を変えるだけで、条件に合う人の一覧が切り替わります。数式は入力済みなので、まずは完成例を動かしてみましょう。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り
対応:Microsoft 365・Excel 2021・Excel 2024
ダウンロードしたら、この3ステップ
1. ダウンロードしたファイルを開き、「Sheet1」を選びます。
2. 黄色いE2セルの「営業」を「経理」に変更して、Enterキーを押します。
3. 右側のE5:G5に「佐藤花子・経理部・200」が表示されれば成功です。
FILTER関数で部署に営業を含む3行を抽出したサンプル
左が元データ、右が抽出結果です。最初は営業部の3人が表示されています。
別シートへの抽出を試すときは「抽出結果」シートのB1を変更します。D列などの1・0は計算用の補助列なので、最初は編集せずに進めてください。
開いたときに保護ビューが表示され、入力できない場合は、ファイルの入手元を確認して「編集を有効にする」を選んでください。
結論:この式で、部署に「営業」を含む行を取り出します
数式=FILTER(A2:C6,ISNUMBER(SEARCH("営業",B2:B6)),"該当なし")
ひとことで部署に「営業」を含む行だけを、氏名・部署・売上まとめて取り出す
A2:C6
取り出す表の範囲。氏名・部署・売上のA〜C列が対象です
ISNUMBER(SEARCH("営業",B2:B6))
B列の部署に「営業」を含む行だけを TRUE にする条件です
"該当なし"
1件も当てはまらないときに表示する文字です
データの流れ
① 元データ(A2:C6)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
② 部署に「営業」を含む行だけが TRUE(黄色)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
③ TRUEの行が、A〜C列まとめて取り出される結果
田中太郎 | 営業部 | 100鈴木一郎 | 営業部 | 300高橋恵子 | 営業部 | 250
対応バージョンMicrosoft 365・Excel 2021・2024で使えます。Excel 2019・2016では、後半の「テキストフィルター」を使ってください。
やりたいこと使う方法
元データを変えたら抽出結果も更新したいFILTER+ISNUMBER+SEARCH
別シートに一覧を作りたい抽出先に、元シートを参照するFILTER式を入力
Excel 2019・2016で抽出したいテキストフィルターの「指定の値を含む」
セルの中の文字だけ切り出したい文字列の抽出方法(LEFT・MID・RIGHTなど)
目次

まず動かしてみよう|この記事のサンプルをその場で試せます

練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。

練習用の表(A1:C6)と、式を入れるセル

練習ファイルの「Sheet1」には、次の表がA1:C6に入っています。1行目は見出し、データは2~6行目です。

Excelの行A列:氏名B列:部署C列:売上
2田中太郎営業部100
3佐藤花子経理部200
4鈴木一郎営業部300
5山田次郎人事部150
6高橋恵子営業部250

黄色いセルを変更すると抽出結果が変わります。「Sheet1」は同じシートでの抽出、「抽出結果」は別シートへの抽出です。判定の途中経過が分かるように、サンプルでは補助列で1(該当)・0(非該当)を表示しています。

サンプルのSheet1では、E2が検索文字、D2:D6が各行の判定、E5:G7が抽出結果です。E5の式は=FILTER(A2:C6,D2:D6,"該当なし")です。D2には次の式を入れて6行目までコピーしています。検索文字を空にすると判定はすべて0になり、「該当なし」と表示されます。

Sheet1のD2に入力(D6までコピー)
数式=--AND(LEN($E$2)>0,ISNUMBER(SEARCH($E$2,B2)))
ひとことで検索文字が空でなく、B2に含まれていれば 1、そうでなければ 0
LEN($E$2)>0
E2の検索文字が空欄でないか調べます。空欄のままだと全行が一致してしまうのを防ぎます
ISNUMBER(SEARCH($E$2,B2))
B2にE2の文字が含まれていれば TRUE。SEARCHは見つかると位置の数値を返し、無いとエラーになります
AND( … )
両方が成り立つときだけ TRUE。先頭の -- が TRUE・FALSE を 1・0 に変えます
データの流れ
① E2とB2の文字
E2営業B2営業部
▼
② B2に「営業」が含まれる → 条件OK
TRUE
▼
③ -- で 1・0 に変換(含まない行は 0)結果
D21
ポイント先頭の--はTRUE・FALSEを1・0に変換します。このあと紹介する補助列なしの式も、同じE5セルへ置き換えて試せます。

FILTER関数で特定の文字を含む行をすべて抽出する

1
Sheet1のE5セルを選びます。
2
冒頭の数式を貼り付けてEnterキーを押します。
3
E5:G7に、部署名に「営業」を含む3人のデータが表示されます。
氏名部署売上
田中太郎営業部100
鈴木一郎営業部300
高橋恵子営業部250
ポイント「営業部」と完全に同じでなくても、「営業一課」「海外営業部」など「営業」を含む部署が対象です。

数式の読み方

SEARCH("営業",B2:B6)
各部署名から「営業」を探し、見つかった位置を数値で返します。見つからない場合はエラーになります。
ISNUMBER(...)
位置が数値で返った行をTRUE、見つからなかった行をFALSEにします。
FILTER(A2:C6,...,"該当なし")
TRUEの行をA~C列まとめて取り出します。1件もなければ「該当なし」と表示します。
ポイントこの式はSEARCHで見つからない場合をFALSEにします。検索対象セル自体がエラーの場合も抽出対象から外れるため、元データのエラーは先に確認してください。

検索する文字をセル入力で切り替える

E2に「営業」と入力し、E5を次の式に変えると、E2の文字を書き換えるだけで検索できます。E2が空白のときは案内を表示します。

E5を次の式に変える(検索文字をE2で切り替える)
数式=IF(E2="","検索文字を入力",FILTER(A2:C6,ISNUMBER(SEARCH(E2,B2:B6)),"該当なし"))
ひとことでE2が空なら案内を表示し、文字が入っていればその文字で抽出する
E2=""
E2が空欄かどうかを調べます
"検索文字を入力"
E2が空のときに表示する案内です
FILTER(A2:C6,ISNUMBER(SEARCH(E2,B2:B6)),"該当なし")
E2に文字があるとき、その文字を含む行を取り出します(検索文字を E2のセルから読み込む形)
データの流れ
① E2に「経理」と入力
E2経理
▼
② 部署に「経理」を含む行だけが TRUE(黄色)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
③ 佐藤花子さんの1行が表示される結果
佐藤花子 | 経理部 | 200

E2に「経理」と入れると佐藤花子さんの1行が表示されます。SEARCHは英字の大文字・小文字を区別しません。また、*と?はワイルドカードです。記号そのものを探す場合は~*、~?と指定します。

特定の文字を含む「セル」だけを抽出する(1列だけ取り出す)

行ではなく、部署名のような「セルの値」だけを一覧にしたいときは、FILTERの取り出す範囲を1列(B2:B6)にします。条件の部分は、行ごと抽出する式と同じです。

1列だけ取り出す(セルの値だけを一覧にする)
数式=FILTER(B2:B6,ISNUMBER(SEARCH("営業",B2:B6)),"該当なし")
ひとことで取り出す範囲を1列にして、「営業」を含むセルの値だけを一覧にする
B2:B6
取り出す範囲です。部署の1列だけを指定するので、氏名や売上は出ません
ISNUMBER(SEARCH("営業",B2:B6))
「営業」を含むセルだけを TRUE にする条件です。行ごと抽出する式と同じです
"該当なし"
1件も当てはまらないときに表示する文字です
データの流れ
① 部署の列(B2:B6)から、「営業」を含むセル(黄色)を探す
B2営業部B3経理部B4営業部B5人事部B6営業部
▼
② 該当したセルの値だけが、1列に並ぶ結果
I3営業部I4営業部I5営業部
ポイント取り出す範囲を A2:C6 から B2:B6 に変えるだけです。条件の範囲(B2:B6)は、取り出す範囲と同じ行数にそろえます。

文字の一部分だけを取り出したい(「ABC-123」から「123」だけ、など)ときは、文字列の抽出方法(LEFT・MID・RIGHTなど)をご覧ください。

別シートに抽出結果を自動表示する

サンプルの「抽出結果」シートでは、B1が検索文字、A3:C3が見出し、A4が結果を表示するセルです。E4:E8で元データの各行を判定し、A4の=FILTER('Sheet1'!A2:C6,E4:E8,"該当なし")で抽出しています。

E4には次の判定式を入れ、E8までコピーしています。

「抽出結果」シートのE4に入力(E8までコピー)
数式=--AND(LEN($B$1)>0,ISNUMBER(SEARCH($B$1,'Sheet1'!B2)))
ひとことで別シート(Sheet1)の部署名に、B1の文字が含まれていれば 1
LEN($B$1)>0
B1の検索文字が空欄でないか調べます
ISNUMBER(SEARCH($B$1,'Sheet1'!B2))
‘Sheet1’! は別シートを指します。B2は元データの部署名(1行目)。B1の文字が含まれていれば TRUE です
AND( … )
両方が成り立つときだけ TRUE。先頭の -- で 1・0 に変えます
補足$B$1 は絶対参照なので、E8までコピーしても検索文字(B1)を見続けます。参照先の行は、E4→Sheet1のB2、E5→B3…と1行ずつずれます。
別シートにFILTER関数の抽出結果を表示するサンプル
「抽出結果」シートのB1で検索文字を指定。元データはSheet1に置いたままです。

補助列を使わず1つの式で書く場合は、A4を次の式に置き換えます。自分で作る場合も、同じセル位置ならそのまま使えます。

補助列を使わずに書く場合(「抽出結果」シートのA4)
数式=IF(B1="","検索文字を入力",FILTER('Sheet1'!A2:C6,ISNUMBER(SEARCH(B1,'Sheet1'!B2:B6)),"該当なし"))
ひとことでB1が空なら案内を表示し、文字があれば別シートの表から抽出する
B1=""
検索文字(B1)が空欄かどうかを調べます
"検索文字を入力"
空欄のときに表示する案内です
FILTER('Sheet1'!A2:C6,…)
‘Sheet1’! を付けて、別シートの表(A2:C6)と部署(B2:B6)を指定します。同じ行数にそろえるのがポイントです

'Sheet1'!は元データのあるシートを表します。B1は抽出結果シートの検索文字です。Sheet1の部署や売上を変更すると抽出結果にも反映されます(計算方法が「自動」の場合)。

シート名が違う場合はSheet1を実際の名前に変えます。数式入力中に元シートをクリックして範囲を選ぶと、シート名の入力間違いを防げます。

注意この例は6行目までが対象です。7行目以降にもデータを追加する場合は、A2:C6とB2:B6の終端を同じ行まで広げてください。行追加が多い表では、元データをExcelテーブルにして構造化参照を使う方法もあります。

複数条件で行を抽出する

サンプルのA16にはAND条件、E16にはOR条件の式があります。I列・J列で「営業を含む」「経理を含む」をそれぞれ判定しています。下の本文では補助列なしで書く式を示します。

FILTERのAND条件とOR条件による抽出結果の比較
左は営業かつ売上200以上の2人。右は営業または経理の4人です。

「営業を含む」かつ「売上200以上」(AND条件)

AND条件:「営業を含む」かつ「売上200以上」
数式=FILTER(A2:C6,ISNUMBER(SEARCH("営業",B2:B6))*(C2:C6>=200),"該当なし")
ひとことで条件を * でつなぐと、両方を満たす行だけが残る
ISNUMBER(SEARCH("営業",B2:B6))
部署に「営業」を含む行が TRUE(=1)になります
*
掛け算です。両方とも 1 の行だけが 1 のまま残ります(AND=かつ)
(C2:C6>=200)
売上が200以上の行が TRUE(=1)になります
データの流れ
① 「営業を含む」行(黄色)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
② 「売上200以上」の行(黄色)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
③ 両方に当てはまる行だけが残る結果
鈴木一郎 | 営業部 | 300高橋恵子 | 営業部 | 250

条件を*でつなぐと、両方を満たす行だけが対象になります。この表では鈴木一郎さん(300)と高橋恵子さん(250)の2行です。

「営業」または「経理」を含む(OR条件)

OR条件:「営業」または「経理」を含む
数式=FILTER(A2:C6,(ISNUMBER(SEARCH("営業",B2:B6))+ISNUMBER(SEARCH("経理",B2:B6)))>0,"該当なし")
ひとことで条件を + でつなぐと、どちらか1つでも満たす行が残る
ISNUMBER(SEARCH("営業",B2:B6))
「営業」を含む行が 1 になります
+
足し算です。どちらか1つでも 1 なら、合計は 1 以上になります(OR=または)
ISNUMBER(SEARCH("経理",B2:B6))
「経理」を含む行が 1 になります
>0
合計が 1 以上の行を TRUE にして、FILTERの条件にします
データの流れ
① 「営業」を含む行(黄色)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
② 「経理」を含む行(黄色)
2行目田中太郎 | 営業部 | 1003行目佐藤花子 | 経理部 | 2004行目鈴木一郎 | 営業部 | 3005行目山田次郎 | 人事部 | 1506行目高橋恵子 | 営業部 | 250
▼
③ どちらかに当てはまる行が残る(人事部は除かれる)結果
田中太郎 | 営業部 | 100佐藤花子 | 経理部 | 200鈴木一郎 | 営業部 | 300高橋恵子 | 営業部 | 250

条件を+でつなぎ、1つ以上満たす行を取り出します。この表では人事部を除く4行が対象です。1行が両方の条件を満たしても、その行が二重に出ることはありません。

部署名が「営業部」と完全に一致する行だけ

部署名が「営業部」と完全に一致する行だけ
数式=FILTER(A2:C6,B2:B6="営業部","該当なし")
ひとことでSEARCHを使わず、= で完全に同じ部署名だけを取り出す
B2:B6="営業部"
部署名が「営業部」と完全に同じ行だけ TRUE にします。「営業一課」「海外営業部」などは対象外です
補足「営業一課」などを含めたくない場合はこちらです。「営業を含む」(SEARCH)との違いは、部分一致か完全一致かです。

「営業一課」などを含めたくない場合はこちらです。複数条件の考え方はFILTER関数の複数条件による抽出でも解説しています。

Excel 2019・2016ではテキストフィルターを使う

1
見出しを含めてA1:C6を選び、「データ」→「フィルター」をクリックします。
2
B列「部署」のフィルターボタンを開き、「テキストフィルター」→「指定の値を含む」を選びます。
3
「営業」を入力して確定します。該当する3行だけが表示されます。
4
別の場所へコピーする場合は、表示中の表を選び、「ホーム」→「検索と選択」→「条件を選択してジャンプ」で「可視セル」を指定してからコピーします。
5
新しいシートのA1などへ貼り付けます。
注意これは手動操作です。元データを変更したらフィルターを再適用し、必要に応じてコピーし直します。検索ダイアログで見つかったセルを選ぶだけでは、氏名・部署・売上の行全体を抽出したことにはなりません。

抽出できない・エラーになるときの確認点

症状確認すること
#NAME?、または_xlfn.が表示されるFILTERに対応しているExcelか確認。2019・2016ではテキストフィルターを使用。
#SPILL!結果を広げる先に値や結合セルがないか確認。式はExcelテーブルの外に入力。
#VALUE!抽出範囲と条件範囲の行数をそろえる。A2:C6ならB2:B6を指定。
該当なし検索文字、検索対象の列、全角・半角や余分な空白を確認。
検索文字を消すと全件出る空文字をSEARCHに渡さないよう、セル入力の例のIFを使用。
追加した行が表示されないすべての対象範囲を、新しい最終行まで広げる。

よくある質問

英字の大文字と小文字を区別できますか?

できます。SEARCHをFINDに変更します。たとえばISNUMBER(FIND("ABC",B2:B6))なら大文字のABCを含む行が対象です。

抽出した結果を編集できますか?

FILTERの結果は元データと数式から決まります。結果の途中のセルを直接書き換えるのではなく、元データを編集します。固定の一覧として編集したい場合は、結果をコピーして別の場所へ「値」で貼り付けます。

セルの一部分だけを取り出す方法とは違いますか?

この記事は条件に合う「行」を取り出す方法です。「ABC-123から123だけを取り出す」といった用途は、特定の文字より後ろを抽出する方法をご覧ください。

解説を読んだら、サンプルで試してみましょう

行抽出のExcelサンプルをダウンロード(無料)

開くシートと最初の操作をもう一度確認する

あわせて読みたい:FILTER関数・XLOOKUPの関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次