質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

900閲覧

VBAで変数に代入された値の比較について

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2020/06/24 00:47

編集2020/06/24 01:08

VBAでIF文を使用し、変数に代入された値を比較しようとしているのですが、何故か上手くいきません。

VBA

1Dim D As Variant 2If J42.Value = X41.Value Then 3 D = 0 4Else 5 D = 1 6End If

J42、X41にはそれぞれ別ブックから取得した値が代入されているのですが、確認しても想定どおりの値が入っており、値は等しいのに実行するとElseの方が実行されてしまいます。

デバッグで確認したJ42、X41の値は画像の通りです。

何故この処理はElseに飛んでしまうのでしょうか?
また、どうすればD = 0を実行してくれる様になるのでしょうか?

お手数ですが、どなたかお解りになる方、ご教授いただけますと助かります。

イメージ説明
イメージ説明

追記
J42、X41はそれぞれ結果は同じですが違う計算式が記入されているセルの値を取得しています。
(例:J42には「=A1+A2」、X41には「=B1+B2」といった状態です。)
計算式が違うからElseに飛ぶのかと思い上記ではJ42.Value、X41.Valueとしているのですが、結果はValueを付けても付けなくても同じでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

誤差だと思います。

VBA

1Sub Test_Sample_Miniature() 2 '----------------------------------- 3 If (0.1 + 0.2) = 0.3 Then 4 MsgBox "⇒ 一致" 5 Else 6 MsgBox "⇒ 不一致" 7 End If 8 '----------------------------------- 9 Dim varA As Range 10 Dim varB As Range 11 12 Set varA = Range("A1") 13 Set varB = Range("B1") 14 varA = 0.3 15 varB = 0.1 + 0.2 16 17 '計算差額のチェック 18 If varA.Value = varB.Value Then 19 MsgBox "一致" 20 Else 21 MsgBox "不一致 ⇒ " & varA & " - " & varB 22 End If 23 '----------------------------------- 24 MsgBox (26.26 - 26) 25End Sub

投稿2020/06/24 01:21

編集2020/06/24 02:31
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/24 02:09

ご回答いただきありがとうございます。 どうやらご指摘の通りだった様で、元々設定していたJ42、X41の変数型をRangeからLongに変更したら想定どおりの動きをしてくれました。 本当にありがとうございました。
guest

0

J42.ValueとX41.Valueが数値なら、厳密な型で比較した方が安全です。
例えば、どちらもIntegerであるならば、

If CInt(J42.Value) = CInt(X41.Value) Then

のようにするか、J42.ValueやX41.ValueをIntegerの変数に格納したものを比較します。

投稿2020/06/24 01:13

kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

J42、X41にはそれぞれ別ブックから取得した値が代入されている

ここで言うJ42X41はセルのことを指していますか?
変数のことを指していますか?

前者であるなら、そもそも構文が違います。
次のように書いてみてください。

VBA

1If Range("J42").Value = Range("X41").Value Then

後者であるなら、定義箇所を提示してもらいたいところですが、おそらく次のように書けば済むはずです。

VBA

1If J42 = X41 Then

投稿2020/06/24 01:12

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/06/24 01:25

質問内容を勘違いしていたみたいなので、この回答はスルーしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問