意外と知らないExcelの罠
仕事で使っているワークシートがありまして、入っている数式を上書きしたらわかるように
チェックするためのプログラムを作ってありました。
チェックでは二方向から合計したセルを比較することで一方が間違っているかがわかるというものです。
ところがこの比較するプログラムが明らかに同じセルの数値にFalseを返したのです。
更に調べるとワークシート関数で比較するとTrueを返します。
それで、セルに何が入っているかを調べる為にTypeName関数で型を調べると
どちらもDoubleであることがわかりました。
これはまるめによる誤差ではないかと調べるとわかりました。
http://msdn.microsoft.com/ja-jp/library/ae382yt8%28v=VS.80%29.aspx
関数の途中で剰余を使っていたために浮動小数点に誤差が生じていたのです。
この場合の解決方法として、誤差はたいてい小さな値なので差をとって一定値以下なら同じとしちゃえ
という乱暴な方法のようなので、その為の関数を作ってみます。
'浮動小数点数を比較する Function DecHikaku(d1 As Double, d2 As Double) As Boolean If d1 = d2 Then DecHikaku = True Else If d1 > d2 Then If d1 - d2 < 0.0001 Then DecHikaku = True Else DecHikaku = False End If Else If d2 - d1 < 0.0001 Then DecHikaku = True Else DecHikaku = False End If End If End If End Function
今まで意識せずに=で比較してたケースでも例外が発生するケースは重々にあるようです。