Excel関数 逆引き集 | 別表から一致行を抽出 → FILTER

Excel VBA Excel
スポンサーリンク

概要

「別シート(別表)にあるデータの中から、条件に一致する行だけを抽出したい」
そんなときに最強なのが FILTER 関数です。

FILTER は
“指定した範囲から、条件に合う行だけを丸ごと返す”
という関数で、VLOOKUP や INDEX+MATCH ではできなかった
「複数行の抽出」「複数条件の抽出」が一発でできます。

別表(別シート)でも、シート名を付けて範囲を指定するだけでOKです。


基本の使い方(別表から抽出)

書式

=FILTER(元データ範囲, 条件, [該当なしのとき])

別シートの範囲を参照するときは、

=FILTER(Sheet2!A2:D100, 条件)

のように シート名!範囲 を指定します。


別表から一致行を抽出する基本パターン

例:Sheet2 の売上表から「担当者=F2」の行だけ抽出

Sheet2 に次の表があるとします。

  • A列:日付
  • B列:担当者
  • C列:商品
  • D列:金額

Sheet1 の F2 に担当者名が入っているとき、
一致する行だけを Sheet1 の G2 に表示する式は:

=FILTER(Sheet2!A2:D100, Sheet2!B2:B100=F2)

意味をかみ砕くと:

  • Sheet2!A2:D100 … 抽出したい元データ
  • Sheet2!B2:B100=F2 … 「担当者列が F2 と一致する行だけ TRUE」
  • TRUE の行だけが返される

これで、別表から一致行を丸ごと抽出できます。


複数条件で抽出(AND 条件)

例:担当者=F2 かつ 商品=G2 の行だけ抽出

=FILTER(Sheet2!A2:D100,
        (Sheet2!B2:B100=F2) * (Sheet2!C2:C100=G2))

FILTER の条件は TRUE/FALSE の配列なので、
掛け算(*)で AND 条件を作れます。


OR 条件で抽出

例:担当者が F2 または G2 の行だけ抽出

=FILTER(Sheet2!A2:D100,
        (Sheet2!B2:B100=F2) + (Sheet2!B2:B100=G2))

TRUE を 1、FALSE を 0 とみなすため、
足し算(+)で OR 条件が作れます。


該当なしのときのメッセージ

一致する行がないと #CALC! になるため、
第3引数でメッセージを指定します。

=FILTER(Sheet2!A2:D100,
        Sheet2!B2:B100=F2,
        "該当データなし")

よくあるつまずきと対策

条件範囲と元データ範囲の行数は必ず揃える

NG:

  • 元データ:Sheet2!A2:D100
  • 条件:Sheet2!B3:B100(開始行がズレている)

OK:

  • 元データ:Sheet2!A2:D100
  • 条件:Sheet2!B2:B100

別シート名にスペースがある場合は 'シート名'!A1 と書く

例:

='売上 表'!A2:D100

FILTER は複数行を返すので、結果が下方向に広がる

FILTER の結果は「スピル」するため、
結果を置くセルの下に空きスペースが必要です。


例題

問題1: Sheet2 の A2:D100 に売上表があります。Sheet1 の F2 に担当者名が入っています。担当者が F2 の行だけを Sheet1 の G2 に抽出する式を書いてください。

=FILTER(Sheet2!A2:D100, Sheet2!B2:B100=F2)

問題2: Sheet2 の売上表から、「担当者=F2 かつ 商品=G2」の行だけを抽出し、Sheet1 の H2 に表示してください。

=FILTER(Sheet2!A2:D100,
        (Sheet2!B2:B100=F2) * (Sheet2!C2:C100=G2))

問題3: Sheet2 の売上表から、「担当者が F2 または G2」の行だけを抽出し、該当がなければ「該当なし」と表示する式を I2 に書いてください。

=FILTER(Sheet2!A2:D100,
        (Sheet2!B2:B100=F2) + (Sheet2!B2:B100=G2),
        "該当なし")

問題4: Sheet2 の売上表で、金額が 10000 以上の行だけを抽出し、Sheet1 の J2 に表示してください。

=FILTER(Sheet2!A2:D100, Sheet2!D2:D100>=10000)

問題5: Sheet2 の売上表から、「担当者=F2 かつ 金額が 10000 以上」の行だけを抽出し、Sheet1 の K2 に表示してください。

=FILTER(Sheet2!A2:D100,
        (Sheet2!B2:B100=F2) * (Sheet2!D2:D100>=10000))

まとめ

別表(別シート)から一致行を抽出する FILTER のポイントは次の通りです。

  • =FILTER(別シート!範囲, 条件) の形で使う
  • AND 条件は 条件1 * 条件2
  • OR 条件は 条件1 + 条件2
  • 該当なしメッセージは第3引数
  • 別シート名にスペースがある場合は 'シート名'!範囲

FILTER を使いこなせば、
「別表から条件に合う行だけ抽出する」という実務の定番作業が
驚くほどシンプルに、そして壊れにくく書けるようになります。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました