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

 

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

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



著書の紹介

俺とオレ ~さよなら大嫌いな自分~

自分をよく見せたくてつま先立ちで歩き続ける。そんな日常を送ることに限界がきた俺は、胡散臭い男の紹介で「おばあちゃん」と暮らしはじめる。これまで抑圧してきた自分の内面と向き合い、導き出された答えとは……。仕事も恋も上手くいかない23歳の新社会人を変えた一夏の田舎暮らし。

おすすめポイント:人の目ばかり気になる……。人間関係に疲れた……。自分なんて、大嫌いだ……。そんなつま先立ちの人生から解放されるようになります。
http://amzn.to/2FPl2eN

診断テストの紹介

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

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




Pocket

名古屋の難しい言葉を使わないIT・WEBコンサルタント 愛知県を中心に、初心者向けIT・WEB活用の支援をやっています。WEB・ITによる業務効率化、ホームページ作成、VBAマクロ作成、各種IT・WEBセミナーが得意です。

カテゴリー: Excel, マクロ(VBA) タグ: , , , ,