VBAの条件分岐(IF文)で値が同じなのにFalse!?
記事の周囲、または記事中に【広告】が含まれます。
セルA1の値は「500」、セルB1の値は「500」
If Range(“A1”).Value = Range(“B1”).Value then
Msgbox “True” & “ですっ!”
Else
Msgbox “False” & “ですっ!”
End If
結果 : [Falseです!]
ってことありますよね(汗)
これは多分、セルA1とB1の値が同じ500に見えて、端数(小数点以下)が異なるケースだと思います。
A1の見た目の値「500」 A1のEXCEL内部の値「500」
B1の見た目の値「500」 B1のEXCEL内部の値「500.00000000000001」
それで結果として、同じ値ではないと判断しているのです。
見た目は500なのに内部が違うとは困ったものです(汗)
手入力でA1に「500」、B1に「500」とした場合はきっちり「500」ですが、計算結果が500となっている場合は本当にきっちり「500」なのか疑ってかかる必要があります。
そのため、VBAで一致比較をするときは念のため比較前にRoundで丸めておくと確実です。
If range(“A1”).value = range(“B1”) then
↓
小数点0桁で丸める
↓
If Round(Range(“A1”).Value,0) =Round( Range(“B1”).Value,0) then
これで、万一端数が生じても比較で間違うことはありません。
「=」や「<>」といった一致比較をする場合は、事前に丸めておくことをオススメします。
※本記事についてのお問い合わせは、お受けしておりません。
自社サービスの紹介
適性検査「ポテクト」|強み・弱み・性格・仕事力を徹底診断。法人の入社採用テストや社員研修、就活の自己分析まで。無料版あり