• ベストアンサー

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が表示されるのか解りましたら教えてください。 値はウォッチで確認しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 このようにして、桁を区切ります。 ただ、正規の方法がどうかは不安が残ります。テキストで読んだ覚えがあるのですが、見つかりません。

saimako
質問者

お礼

お礼が遅くなり申し訳ありません。 無事、原因と解決法がわかりました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

桁数を指定して比較すればよいでしょう。 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

saimako
質問者

お礼

回答ありがとうございます。 上記のやり方で試してみます。

  • kazu1973
  • ベストアンサー率40% (14/35)
回答No.1

Sheets("sheet1").Cells(85, 1).Value 及び Cells(13, 1).Value の0.38125は 実数値でしょうか? 計算式でしょうか?

saimako
質問者

お礼

0.38125は実数値になっています。

関連するQ&A