Excel関数 逆引き集 | 空白行を除外 → FILTER

Excel VBA Excel
スポンサーリンク

概要

「途中に空白行がいっぱいある表を、ぎゅっと詰めて一覧にしたい」
「空白行を含む範囲から、データが入っている行だけを抜き出したい」

こういうときに一番シンプルで強力なのが FILTER 関数で空白を除外する型 です。
ポイントはたったひとつ。

「この列が空白じゃない行だけ取り出す」という条件を FILTER に渡す。

これさえ押さえれば、どんな表でも「空白行をきれいに詰めた一覧」に変換できます。


FILTER の基本(まずは型を覚える)

FILTER の書式

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

元データ範囲
空白行を含んでいる、元の表全体。
例: A2:D100

条件
行ごとに TRUE / FALSE を返す「ふるい」の部分。
空白行を除外したいときは
「キーとなる列 <> “”」
を使います。

該当なしのとき(省略可)
条件に合う行が1件もなかったときに表示するメッセージ。
なくても動きます。


単一列をキーにして空白行を除外する基本形

キー列を 1 つ決めて、そこが空白かどうかで判定する

前提の表:

A列: 商品コード
B列: 商品名
C列: 数量

A列に「空白行」が混ざっているとします。
A列が空白の行は「その行全体が空行」とみなして除外すると決めます。

別の場所(例: F2)に、次の式を書きます。

=FILTER(A2:C100, A2:A100<>"")

動き方をかみ砕くと、こうなります。

  1. A2:A100<>""
    A列が空白でない行は TRUE、空白の行は FALSE になる。
  2. FILTER(A2:C100, そのTRUE/FALSE)
    TRUE の行だけを A~C列セットで抜き出し、空白行が詰まった一覧になる。

この「範囲, キー列<>""」が、空白行除外の一番基本の型です。


複数列にまたがる「実質空白行」を除外する

「どの列も空白なら、その行を空行として消したい」場合

例えば、A~C列のどこか1つでも値が入っていれば「データあり」とみなし、
3列全部空白の行だけ除外したいとします。

この場合の考え方はこうです。

「A列が空白 かつ B列が空白 かつ C列が空白」
なら行全体を空行とみなします。
逆に言えば、

「A列が空白ではない または B列が空白ではない または C列が空白ではない」
行だけを残せばよい。

OR 条件は足し算(+)、AND 条件は掛け算(*)で書きます。

例: A2:C100 の空白行を除外して抽出したいとき。

=FILTER(
  A2:C100,
  (A2:A100<>"") + (B2:B100<>"") + (C2:C100<>"") > 0
)

中身の意味はこうです。

  • (A2:A100<>"") は、A列が空白でなければ 1、空白なら 0 とみなせる。
  • 同様に B列、C列も判定。
  • 3つの結果を足して「合計が 1 以上ならどこかに値がある」行だけ TRUE。
  • その TRUE 行だけ FILTER で抽出。

これで「3列すべて空白の行」だけがきれいに除外されます。


空白っぽいけど実は「スペース入り」のセルへの対処

TRIM をかませて “見た目空白” も除外する

次のようなケースがあります。

見た目は空白なのに、実は「スペース」だけが入っているセル。
この場合、単純に <>"" で判定すると「空白ではない」とみなされてしまいます。

こういうときは、TRIM で前後の空白を取り除いてから空白判定します。

例: A列をキーにして、スペースだけのセルも空白として扱いたいとき。

=FILTER(A2:C100, TRIM(A2:A100)<>"")

TRIM(A2:A100) で前後の空白を削り、その結果が空文字列かどうかで判定します。
見た目空白+スペース入り空白をまとめて除外できるようになります。


空白行除外+条件検索を同時にやる

「空白行を除外しつつ、担当者が佐藤の行だけ」など

A~D列に売上表があり、B列が担当者、
空白行を除外しながら「担当者=F2」の行だけ抽出したいとします。

空白行除外の条件と、担当者条件を掛け合わせる(AND)イメージです。

=FILTER(
  A2:D100,
  (B2:B100=F2) * (A2:A100<>"")
)

ここでは A列を「その行が空かどうか」を判定する軸にしています。

  • (B2:B100=F2) で担当者が一致する行だけ TRUE。
  • (A2:A100<>"") で空白行を FALSE にする。
  • * で掛け算することで「両方 TRUE の行だけ TRUE」になり、
    担当者一致かつ空白行でない行だけ抽出できます。

例題

問題1

A2:C100 にデータが入っています。
A列が空白の行は「空行」とみなし、それを除外して A2:C100 をそのまま D2 から詰めて表示する FILTER の式を書いてください。

=FILTER(A2:C100, A2:A100<>"")

問題2

A2:C100 にデータがあります。
A~C列の3列すべてが空白の行だけ除外し、それ以外の行をそのまま D2 から表示する FILTER の式を書いてください。

=FILTER(
  A2:C100,
  (A2:A100<>"") + (B2:B100<>"") + (C2:C100<>"") > 0
)

問題3

A2:C100 にデータがありますが、
A列には「スペースのみ」が入っているセルも混ざっています。
スペースだけのセルも空白として扱い、空白行を除外して A2:C100 を D2 から表示する FILTER の式を書いてください。

=FILTER(A2:C100, TRIM(A2:A100)<>"")

問題4

A2:D100 に売上表があり、A列が日付、B列が担当者です。
担当者が F2 の行だけを、かつ空白行を除外して G2 から表示する FILTER の式を書いてください(空白判定は A列を基準に行ってください)。

=FILTER(
  A2:D100,
  (B2:B100=F2) * (A2:A100<>"")
)

問題5

A2:D100 にデータがあります。
A~D列すべてが空白の行だけを除外し、それ以外の行をそのまま E2 から表示する FILTER の式を書いてください。

=FILTER(
  A2:D100,
  (A2:A100<>"") + (B2:B100<>"") + (C2:C100<>"") + (D2:D100<>"") > 0
)

まとめ

空白行を除外するときの FILTER の型は、とてもシンプルです。

一番よく使うのは次の 2 パターンです。

キー列 1 つで空白行を除外する型

=FILTER(範囲, キー列<>"")

複数列すべてが空白の行を除外する型

=FILTER(
  範囲,
  (列1<>"") + (列2<>"") + … > 0
)

この「空白を FALSE にして FILTER に流す」という感覚が身につくと、
「途中に空白がたくさんある表」を一瞬で整った一覧に変えられるようになり、
そのあとに UNIQUE や SORT、SUMIF などをかけるのもぐっとやりやすくなります。

タイトルとURLをコピーしました