エクセルで0と空白の区別を付ける方法

0と空白の扱いはエクセルでは結構微妙なところがあります。

次の表を見てもらいたいのですが、同じ結果を返して欲しい計算式が、ところどころ違う結果を返してきてしまいます(黄色部分)。

0blank_1_1

0と空白の区別をつける方法

0と空白の区別を付ける方法の候補としては、いろいろあるのですが、大きく分けると、

  • 0かどうかを判断する方法
  • 空白かどうかを判断する方法

の2通りがあります。

「0かどうか」で判断する方法

D列~G列までは「0かどうか」「数字かどうか」で判断しようという方法です。

D3セル:=IF(A3=0,"等しい","等しくない")
E3セル:=IF(ISNUMBER(A3),"等しい","等しくない")
F3セル:=COUNT(A3)
G3セル:=COUNTIF(A3,0)

おおむね直感に近い動作をしていますが、if関数で「0と等しい」という比較をした場合(=D列)のみ、違和感がある結果が返ってきてしまいます。

「空欄かどうか」で判断する方法

I列からL列までは「空欄かどうか」で判断しようという方法です。

I3セル:=IF(A3="","等しい","等しくない")
J3セル:=IF(ISBLANK(A3),"等しい","等しくない")
K3セル:=COUNTBLANK(A3)
L3セル:=COUNTIF(A3,"")

通常のif関数での比較であれば問題はありませんが、isblank関数だけは、他の関数と計算結果が違っています。

isblank関数の場合は、計算式が入っているとブランク扱いになりません(今回記事中では触れていませんが、counta関数も同じ挙動を示しています)

なぜ、バラツキが生じてしまうのか?

関数や計算式を計算するときに、

  • 空欄を0に自動で変換するかどうか
  • 計算前の状態で空欄と判断するか、計算後の状態で空欄と判断するかどうか

は関数・計算式ごとに決められています。

そこに統一性がないために、今回実験したように時々違和感がある結果になってしまうのです。

0と空白をどうやって識別すべきか?

私が一押しなのは、

=if( [セル]="" , ... , ... )

というように、空欄かどうかをif関数で判定する方法です。

返ってくる結果も素直ですし、エクセルの内部動作を想像したときにも、この計算式であればトラブルが起きるとは思えません。

count系の関数を使うのであれば、countif関数をメインで使っていくのがいいのではないかと思います。

エクセル基礎講座 「無料」動画マニュアル

「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!

このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。

ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!

無料動画講座 登録フォーム

※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。