エクセルで0と空白の区別を付ける方法
0と空白の扱いはエクセルでは結構微妙なところがあります。
次の表を見てもらいたいのですが、同じ結果を返して欲しい計算式が、ところどころ違う結果を返してきてしまいます(黄色部分)。
0と空白の区別をつける方法
0と空白の区別を付ける方法の候補としては、いろいろあるのですが、大きく分けると、
- 0かどうかを判断する方法
- 空白かどうかを判断する方法
の2通りがあります。
「0かどうか」で判断する方法
D列~G列までは「0かどうか」「数字かどうか」で判断しようという方法です。
D3セル:=IF(A3=0,"等しい","等しくない")
E3セル:=IF(ISNUMBER(A3),"等しい","等しくない")
F3セル:=COUNT(A3)
G3セル:=COUNTIF(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,"")
J3セル:=IF(ISBLANK(A3),"等しい","等しくない")
K3セル:=COUNTBLANK(A3)
L3セル:=COUNTIF(A3,"")
通常のif関数での比較であれば問題はありませんが、isblank関数だけは、他の関数と計算結果が違っています。
isblank関数の場合は、計算式が入っているとブランク扱いになりません(今回記事中では触れていませんが、counta関数も同じ挙動を示しています)
なぜ、バラツキが生じてしまうのか?
関数や計算式を計算するときに、
- 空欄を0に自動で変換するかどうか
- 計算前の状態で空欄と判断するか、計算後の状態で空欄と判断するかどうか
は関数・計算式ごとに決められています。
そこに統一性がないために、今回実験したように時々違和感がある結果になってしまうのです。
0と空白をどうやって識別すべきか?
私が一押しなのは、
=if( [セル]="" , ... , ... )
というように、空欄かどうかをif関数で判定する方法です。
返ってくる結果も素直ですし、エクセルの内部動作を想像したときにも、この計算式であればトラブルが起きるとは思えません。
count系の関数を使うのであれば、countif関数をメインで使っていくのがいいのではないかと思います。