業務効率化

Excel・スプレッドシートで数式入りの空に見えるセルを除外して数える5つの方法

スポンサーリンク

ExcelやGoogleスプレッドシートで表を作っていると、 「数式が入っているのに空白に見えるセル」に出会うことはありませんか?

そんなとき、「空白以外のセルの件数」を正しくカウントしたいのに、 =COUNTA()=COUNTIF() だけではうまくいかない…という経験、あると思います。

この記事では、見た目が空白でないセルだけを数えるための方法を、初心者の方にもわかりやすく解説します。

「空白じゃない」のにカウントされる?

例として、C2:C6 に次のような数式が入っているとします。
=IF(B2>=0.3,"◎",IF(B2>=0.25,"○",""))

この数式では、条件を満たさない場合に「空文字(””)」を返すため、セルの中身が実際には数式でも 画面上は空白に見えます
しかし =COUNTA(C2:C6) のようにカウントすると、空白に見えるセルも「中身あり」と判定されてしまい、本来は数えたくないセルまでカウントされてしまいます。

同じように、次のような COUNTIF でも見た目に関係なくカウントされるため注意が必要です。

=COUNTIF(C2:C6,"<>")

正しく数えるための5つの方法

1. FILTER+COUNTAで空に見えるセルを除外して数える(Excel365/スプレッドシート対応)

【おすすめ度:★★★★★(わかりやすく簡単)】

=COUNTA(FILTER(C2:C6, C2:C6<>""))

FILTER 関数で「空文字(””)」以外のセルだけを取り出し、その結果を COUNTA 関数で数えます。
つまり「不要なセルを先に弾いてから数える」イメージです。

  • FILTER:条件を満たすデータだけを抽出する関数
  • COUNTA:空白以外のセルを数える関数

FILTER関数は比較的新しい関数のため、古いExcel(2019以前など)では使えません。利用できるのは Excel 365 と Google スプレッドシート です。

▶️関数リンク:

2. LEN+SUMPRODUCTで空白を除外してセルを数える(Excel全般/スプレッドシート対応)

【おすすめ度:★★★★★(広範囲に対応)】

=SUMPRODUCT(--(LEN(C2:C6)>0))

この式では、LEN 関数でセルの文字数を調べ、1文字以上なら中身があるセル と判定します。
判定結果は TRUE/FALSE で返されるため、-- を付けて 1 と 0 に変換し、その合計を SUMPRODUCT で数えます。

  • LEN:文字数を返す関数(空文字は0になる)
  • SUMPRODUCT:条件に当てはまるセルを合計できる関数

Excel全般とGoogleスプレッドシートで利用可能です。

▶️関数リンク:

3. ARRAYFORMULA+LENで空白を除外して数える(Googleスプレッドシート専用)

【おすすめ度:★★★★(Googleスプレッドシート用)】

=ARRAYFORMULA(SUM(N(LEN(C2:C6)>0)))

この式では、LEN 関数でセルの文字数を調べ、1文字以上なら中身あり と判定します。
判定結果(TRUE/FALSE)は N 関数で 1/0 に変換され、その合計を SUM で計算します。
さらに ARRAYFORMULA を付けることで、範囲全体に数式を適用できるようになります。

  • LEN:文字数を返す(空文字は0になる)
  • N:TRUEを1、FALSEを0に変換
  • ARRAYFORMULA:スプレッドシート独自の関数。範囲全体に数式を一括で適用できる展開する

ARRAYFORMULAはGoogleスプレッドシート独自の関数で、Excelには存在しないため、この方法はスプレッドシート専用です。

▶️関数リンク:

4. TRIM+SUMPRODUCTで空白を除外して数える(Excel全般/スプレッドシート)

【おすすめ度:★★★★(空白トリミング対応)】

=SUMPRODUCT(--(TRIM(C2:C6)<>""))

TRIM でセルの前後の余分なスペースを取り除いたうえで、空文字(””)でないか を判定します。
判定結果は TRUE/FALSE で返るため、--(二重マイナス)で 1/0 に変換し、その合計を SUMPRODUCT で数えます。

  • TRIM:セルの前後の余分なスペースを取り除く
  • SUMPRODUCT:配列の結果を合計できる関数

Excel全般とGoogleスプレッドシートで利用できます。

▶️関数リンク:

5. ROWS+COUNTBLANKで空白を除外して数える(Excel全般/スプレッドシート)

【おすすめ度:★★★(簡単だが記述に注意)】

=ROWS(C2:C6) - COUNTBLANK(C2:C6)

この式では、範囲の総行数(ROWS)から空白セル数(COUNTBLANK)を引いて、実際に値が入っているセル数を求めます。
COUNTBLANK空文字(””)も空白として数えるため、数式で "" を返すセルも「空白」として扱われます。

  • ROWS:指定範囲の行数を返す
  • COUNTBLANK:空白セルの数を返す(空文字 "" も空白として数える)

Excel全般とGoogleスプレッドシートで利用できます。

▶️関数リンク:


よくある質問(FAQ)

Q
COUNTIF(A1:A10,”*”) はなぜ使えないのですか?
A

COUNTIF(A1:A10,"*") のように、ワイルドカード * を使って「何らかの文字列を含むセル」を数える方法は、見た目が空白のセルをカウントしないように見えますが、実は数式が入っているセルはすべてカウントしてしまいます。
これは、ワイルドカードがセルのではなく、セルが空かどうかを判定するためです。
したがって、数式の結果が空文字 "" であっても、セル自体に数式という「内容」があるためカウントされてしまいます。

Q
なぜ SUMPRODUCT(-- のように -- を使うのですか?
A

SUMPRODUCT 関数は、通常は数値の配列を扱います。
LEN(C2:C6)>0 のような条件式は、結果として TRUEFALSE の論理値を返します。
SUMPRODUCT でこれらの論理値を合計するためには、数値(1と0)に変換する必要があります。
--(二重マイナス)は、この論理値を数値に変換する最も簡潔な方法の一つです。
TRUE1 に、FALSE0 に変換されます。
これは、+0*1 と同じ効果を持ちます。

Q
TRIM 関数はどのような場合に有効ですか?
A

TRIM 関数は、セルの前後の余分なスペースを削除するのに役立ちます。
もし、数式の結果が " " のようにスペースを含む空文字である場合、LEN 関数や FILTER 関数ではそれを「文字あり」と認識してしまいます。
しかし、TRIM 関数を通すことでスペースが取り除かれ、"" と同じ状態になるため、正しく「空白」として扱えます。
予期せぬスペースが含まれる可能性がある場合に特に有効です。


まとめ

ExcelやGoogleスプレッドシートで、数式が入っているのに見た目が空白のセルを除外して正確にカウントするには、単純な COUNTACOUNTIF だけでは不十分です。

この記事で紹介した5つの方法を使い分けることで、このような問題を解決できます。

  • FILTER + COUNTA: 最新のExcel(365)やGoogleスプレッドシートを使うなら、最もシンプルで直感的な方法です。
  • LEN + SUMPRODUCT: どのバージョンのExcelでも、スプレッドシートでも使える汎用性の高い方法です。文字数で判定するため、確実です。
  • ARRAYFORMULA + LEN: Googleスプレッドシートユーザーには、よりコンパクトな記述で使える便利な方法です。
  • TRIM + SUMPRODUCT: セル内に余分なスペースが含まれる可能性がある場合に、より厳密にカウントしたい時に役立ちます。
  • ROWSCOUNTBLANK: 範囲全体の行数から空白セル数を引くというシンプルな考え方で、直感的に理解しやすい方法です。

これらの方法を覚えておけば、データの集計作業がより正確かつ効率的になります。ご自身の環境や目的に合わせて最適な方法を選んでください。

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