- ベストアンサー
EXCEL2007 VBA IF文について
プログラム If Sheets("sheet1").Cells(85, 1).Value = Cells(13, 1).Value Then msgBox "true" Else msgBox"false" End If 値 Sheets("sheet1").Cells(85, 1).Value ← 0.38125 Cells(13, 1).Value ← 0.38125 上記のプログラムと値のとき、結果はtrueが表示されると思うのですが、なぜかfalseが表示されてしまいます。なぜ、falseが表示されるのか解りましたら教えてください。 値はウォッチで確認しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 VBAで小数点を扱う場合、ワークシートのような補正処理がありません。だから、必ず、浮動小数点誤差が存在しますから、ある程度の桁を区切ってあげないといけません。だいたい、小数点の半分ぐらいが、丸め誤差が存在しています。 普通は、CCur などで変換しますが、今回は、小数点5位までありますから、CCur(Currency)は、使えません。Fix 関数や正数だけなら、Int関数を用います。 それから、一旦、変数に置くべきだと思います。 a,b は、そのままですと、Variant/Double 型になっています。 a = Worksheets("Sheet1").Cells(85, 1).Value b = Cells(13, 1).Value a = Fix(a * 10 ^ 5) / 10 ^ 5 b = Fix(b * 10 ^ 5) / 10 ^ 5 このようにして、桁を区切ります。 ただ、正規の方法がどうかは不安が残ります。テキストで読んだ覚えがあるのですが、見つかりません。
その他の回答 (2)
- KURUMITO
- ベストアンサー率42% (1835/4283)
桁数を指定して比較すればよいでしょう。 If WorksheetFunction.Round(Sheets("sheet1").Cells(85, 1).Value,5) = WorksheetFunction.Round(Cells(13, 1).Value,5) Then msgBox "true" Else msgBox"false" End If
お礼
回答ありがとうございます。 上記のやり方で試してみます。
- kazu1973
- ベストアンサー率40% (14/35)
Sheets("sheet1").Cells(85, 1).Value 及び Cells(13, 1).Value の0.38125は 実数値でしょうか? 計算式でしょうか?
お礼
0.38125は実数値になっています。
お礼
お礼が遅くなり申し訳ありません。 無事、原因と解決法がわかりました。