同じ数字なのにif関数では「不一致」になる理由
数字同士をif関数で比較する場合に、
どう見ても、条件を満たしているように見えるのに、
条件を満たしていない扱いになってしまう、
という場合があります。
どう見ても一致しているのに。if関数のバグ?
A1セルとA2セルは、
同一の内容に見えるのに、
if関数で比較すると「違う」と判定されてしまう場合。
原因は、いくつか考えられます。
以下、順番に見ていこうと思います。
1.セルに入力されている数値が違う
書式設定の影響で、
見かけ上同じ数字に見えてしまっているが、
実際に入力されている数値は違う、という場合。
if関数で比較しても一致しません。
例えば、
以下のように、
- A1セルに「0.8」
- A2セルに「1.2」
と入れている状態で、
A1セル、A2セルの書式を「小数点以下の桁数 0桁」
に設定してしまうと、
セルの表示上は、A1セル・A2セルともに「1」に見えてしまいます。
でも、if関数で比較をする際には、
A1セル、A2セルに入っている実際の値で比較をします。
「A1セル:0.8」≠「A2セル:1.2」
ですから、
if関数では不一致と判定されます。
2.演算誤差が生じている
小数どおしで比較をする場合には、
「演算誤差」の影響により、
一致しているはずなのに一致しない、という場合があり得ます。
なぜ、こういうことが起きるのか?
詳細は、小数をif関数、vlookup関数に使うときは演算誤差に注意をご覧ください。
3.データ型が違う
例えば、下記のように、
A1セル、B1セルのどちらかの左上に緑三角マークがついている場合。
if関数が一致しないのは、
データ型が違うことが原因である可能性が高いです。
「データ型」というのは、
エクセルに入力された値を記録する「方法」のことで、
多くの場合、
次の2つの「データ型」のどちらかに分類されます。
- 数値
- 文字列
「データ型」なんて
見たことも聞いたこともないかもしれませんが、
それもそのはず。
「データ型」は、エクセルの「隠し属性」のようなもので(笑)、
おおっぴらに語られることはありません。
※実は、「データ型」という言葉自体、
私が勝手に言っているもので、
マイクロソフトがオフィシャルに言っているものではありません。
さて、話をif関数に戻します。
if関数で、
「データ型」が違うもの同士で比較をした場合、
たとえ、見た目が同一であっても、
if関数での比較では「不一致」と判定されてしまうのです。
今回の例では、
A1セルは数値の「1」
B1セルは文字列の「1」
が入力されており、
両者のデータ型が一致していないので、
両者を比較しても「不一致」と判定されてしまうのです。
データ型の見分け方
話を簡単にするために、
「数字」同士の比較に限定してみると、
どちらのデータ型に分類されるかは、
セルの書式設定に依存しています。
- セルの書式が文字列の場合
-
データ型は「文字列」
- それ以外の書式の場合
-
データ型は「数値」
つまり、
セルの書式設定が、
- 片方は文字列
- 片方は文字列「以外」
になっている状態で、
if関数で、一致しているかどうかの判断を行うと、
仮に、同じ数字が入っていても「不一致」と判断されてしまうのです。
4.まとめ
ということで、
if関数を使うときには、
- セルの書式設定
- 小数を条件にする計算式
には細心の注意を払いましょう。
知らないと、ドツボにはまりますよ。