Excel で数値の精度が数式、関数によって異なる件
最近は Google Spreadsheet に慣れてしまい、Excel のことを忘れてしまいそうです。
とはいえ、互換性を考えるとまだまだ、というか多分今後も Excel を使わざるを得ないのでしょう。
さて、今回は Excel での数値比較の際、使う比較方法によって少数の精度が異なるというお話です。
まずは下の画像を。
ちょっとわかりにくいかもしれませんが、時刻を決まった時間単位ずつ増やしていった表があります。
A列は上のセルに10分足すというのを繰り返したもの。B列は、B3セルに足す数値を10分ずつ増やす方法。C列は時間をベタ打ちです。
そして、D列以降にはAからC列をそれぞれ総当りで、= または MATCH を使って比較した結果が書かれています。
時間をベタ打ちしたものと計算したもので同じ値になっていないものが出てくるのはまあ、しょうがないでしょう。
計算方法による違いもわかります。
これは小数点以下の桁数が制限されているので仕方のないことです。
ただ、問題は = で比較したときと、MATCH 関数内で比較したときの結果が異なること。
感覚的には = の比較で TRUE が返ってくるなら MATCH 関数の結果は数値になっているはず。
ところが、= の比較で TRUE になっているのに MATCH の結果が #N/A になっているところが結構あります。
ということは、= で比較したときと MATCH で比較した時で数値の精度が異なるということでしょう。
このばらつきはなんとかしてほしいところです。
ちなみに、同じことを Google Spreadsheet でやってみたら、どの比較も = と MATCH 関数とで結果が一致しました。
まあ、どっちにしても時間の計算結果を条件として検索するという場合には、ROUND 関数で適当な桁で切り上げるとか、文字列として比較するといった工夫が必要なのですが。