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

 

これで、万一端数が生じても比較で間違うことはありません。

「=」や「<>」といった一致比較をする場合は、事前に丸めておくことをオススメします。



※本記事についてのお問い合わせは、お受けしておりません。

自社サービスの紹介

自己分析診断テスト「ポテクト」で強み・弱みを徹底分析! 無料版あり

適性検査「ポテクト」|強み・弱み・性格・仕事力を徹底診断。法人の入社採用テストや社員研修、就活の自己分析まで。無料版あり


おすすめ本の紹介

クリティカルチェーン ~なぜ、プロジェクトは予定どおりに進まないのか?~

ゴールドラット博士3作目(日本では4作目)のビジネス小説。なぜ、プロジェクトは予定通りに進まないのか?人間の心理的特性を考慮し、TOC(制約条件の理論)をプロジェクト・マネジメントに応用することで、これまでの常識を覆し、パフォーマンスを飛躍的に改善させるツールとソリューションを提示する。※前シリーズの用語が出てくるので、ゴールゴール2を先に読むことをおすすめします。