概要
「途中に空白行がいっぱいある表を、ぎゅっと詰めて一覧にしたい」
「空白行を含む範囲から、データが入っている行だけを抜き出したい」
こういうときに一番シンプルで強力なのが FILTER 関数で空白を除外する型 です。
ポイントはたったひとつ。
「この列が空白じゃない行だけ取り出す」という条件を FILTER に渡す。
これさえ押さえれば、どんな表でも「空白行をきれいに詰めた一覧」に変換できます。
FILTER の基本(まずは型を覚える)
FILTER の書式
=FILTER(元データ範囲, 条件, [該当なしのとき])
元データ範囲
空白行を含んでいる、元の表全体。
例: A2:D100
条件
行ごとに TRUE / FALSE を返す「ふるい」の部分。
空白行を除外したいときは
「キーとなる列 <> “”」
を使います。
該当なしのとき(省略可)
条件に合う行が1件もなかったときに表示するメッセージ。
なくても動きます。
単一列をキーにして空白行を除外する基本形
キー列を 1 つ決めて、そこが空白かどうかで判定する
前提の表:
A列: 商品コード
B列: 商品名
C列: 数量
A列に「空白行」が混ざっているとします。
A列が空白の行は「その行全体が空行」とみなして除外すると決めます。
別の場所(例: F2)に、次の式を書きます。
=FILTER(A2:C100, A2:A100<>"")
動き方をかみ砕くと、こうなります。
A2:A100<>""
A列が空白でない行は TRUE、空白の行は FALSE になる。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 などをかけるのもぐっとやりやすくなります。

