いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)COUNTIF関数で空白/空白以外のセルをカウントする

 ExcelのCOUNTIF関数を使って空白セル(未入力状態)または空白以外のセルをカウントする方法についてです。
 式は難しくはなものの、空白セルと「空白セルに見えて異なるセル」の違いを把握することが重要になります。

空白セルをカウントする

 まずは基本的なカウントの方法です。
 次の画像のB3:B10の範囲には文字列、数値、日付などが記録されています。B8,B9セルは長さ0の文字列(空文字列)で、B10セルが純粋な空白セル(数式バーを確認しても何もないセル)です。また、C列にはLEN関数を入力してそれぞれの値の(文字としてみた場合の)長さをカウントしています。
 E3セルにCOUNTIF関数を使った式を入力し、このうち空白セルだけをカウントしています。

 E3セル

=COUNTIF(B3:B10,"=")

 COUNTIF関数の第2引数(条件)を「"="」とすることで空白セルをカウントできます。
 一見奇妙な式ですがイコールを省略して「""」としてしまうと異なる結果になります(下記参照)。



 ただし結果が「1」というだけではどのセルをカウントしているのか区別がつきません。特に空文字列との区別が気になるところなので、次の画像では空文字列を2つ、空白セルを6つに置き換えています。
 結果は「6」で、空白セルがカウントされているのがわかります。

空白セル以外をカウントする

 次の画像ではCOUNTIF関数を使って空白セル以外のセルをカウントしています。

 E3セル

=COUNTIF(B3:B10,"<>")

 第2引数を「"<>"」としています。
 これで空白セル以外をカウントできます。スペースはもちろん、空文字列もカウントされます。

空白セルと空文字列をカウントする場合

 次の画像では「=COUNTIF(B3:B10,"")」という式でカウントしています。
 このように第2引数を「""」とすることで空白セルだけでなく空文字列もカウントされるので、結果は「3」になります。
 後述するように式の結果は絶対に空白セルにならないので、これにも使い道があります。

 なおCOUNTBLANK関数もこの式と同じ結果になります。一見空白セルだけをカウントしてくれそうな名前ですがそうではないので注意が必要です。


 ところで逆に「通常の文字列、数値、日付、全角半角スペースをカウントする」というのがCOUNTIFではなかなか厄介です。「=COUNT(IF(LEN(B3:B10),1,""))」のようにしてしまうのが1つの方法です。
 「=COUNTIF(B3:B10,"*")」のように「"*"」(0文字以上の文字を表すワイルドカード)をカウントすると通常の文字列、全角半角スペース、空文字列がカウントされ、数値や日付はカウントされません

注意点:式の結果は空白セルにならない

 次の画像ではB,C列に都道府県名と市区名が記録されています。ただしB5,C5,B7,C7セルは空白セルです。
 また、D列には「=B3&C3」といった式を入力し、2つの列の文字列を結合した結果を得ています。
 ここでF3セルに「=COUNTIF(D3:D8,"=")」という式を入力してD列の空白セルをカウントしようとしていますが、結果は「0」となっています。

 これは空白セル同士を「&」で結合した結果(D5,D7セル)がいずれも空白セルではなく空文字列になっているからです。よってこの場合は「=COUNTIF(D3:D8,"")」とする方が適当です(結果は2になります)。
 また、「&」による結合に限らず式を使った結果は空文字列になることはあっても空白セルになることはないので、意図としては「空のセルをカウントしたい」であっても「""」を使ってカウントするのが適当といえます。
 それならいつでも「""」でカウントした方が無難ではないかという気もしますが、空白セルと空文字列の意味が区別されている場合(例としては「未回答」と「回答欄が空白」のような区別です)もあるため常にそう言い切れないのが難しいところです。この辺りは一律の正解があるわけではなく「どの値をどういう意味として分類するか」というユーザ側の取扱いの問題といえます。



 ちなみに「=COUNTIF(D3:D8,"<>")」とするとすべてのセルがカウントされるので結果は「6」となってしまいます。