[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vba IF文について』(T17)
お世話になります。
以下の例1は「型エラー」となりますが、例2はなりません。
この違いを教えていただけないでしょうか?
例1) Dim dif1 As Variant Dim dif2 As Variant Const thd2 = 10 If Not dif1(i, 0) = "-" And Not dif2(i, 0) = "-" And _ (dif2(i, 0) > thd2 Or (dif1(i, 0) - dif2(i, 0)) > thd2) Then (処理...) 例2) If Not dif1(i, 0) = "-" And Not dif2(i, 0) = "-" Then If dif2(i, 0) > thd2 Or (dif1(i, 0) - dif2(i, 0)) > thd2 Then (処理...)
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>例2はなりません。
本当ですか?
追試したいので、テスト用のフルコードをアップしてください。
(半平太) 2017/02/20(月) 17:41
Dim dif1(要素数1, 要素数2) As Variant Dim dif2(要素数1, 要素数2) As Variant
と宣言すればいいだけでは?
例2でも型エラーはおきましたけどね (nazo) 2017/02/20(月) 17:44
また、書いた本人が説明できない論理式は、人に直してもらうものではありません。ご自分でデバッグしてください。
(???) 2017/02/20(月) 17:50
dif1(i, 0) - dif2(i, 0)
の計算が評価されないからエラーがでません。
例1では計算が評価されて、文字列の引き算はできませんという値の型が違うエラーです。
※ちゃんと最低限、動作確認できるコードを提示しましょう。
回答者に手間かけさせるのは、
いい回答を得るための、得策とは言えないと思います。
(変数の比較式の話なのに変数に何が入っているか、
想像して動作確認しないといけないようになっている)
(まっつわん) 2017/02/20(月) 17:52
>以下の例1は「型エラー」となりますが、例2はなりません。
次のように書くと、例1も例2も、ともにエラーになりません。 例1はIf文が1つ、例2はIf文が「入れ子」になっていて、 If文が2つという違いですね。
例1は、If文で、比較演算を4つ行ってます。 例2は、1つ目のIf文で、比較演算を2つ行った後に、 2つ目のfF文で、比較演算を2つ行っています。
***************************************************************** Option Explicit
Sub test1() Dim i As Long i = 1 Dim thd2 As Long thd2 = 10
ReDim dif1(0 To 10, 0 To 10) As Variant '★1次元、2次元ともに、0〜10とする ReDim dif2(0 To 10, 0 To 10) As Variant '★1次元、2次元ともに、0〜10とする dif1(i, 0) = "123" dif2(i, 0) = "456"
If Not dif1(i, 0) = "-" And Not dif2(i, 0) = "-" And _ (dif2(i, 0) > thd2 Or (dif1(i, 0) - dif2(i, 0)) > thd2) Then MsgBox "テスト1" End If End Sub
Sub test2() Dim i As Long i = 1 Dim thd2 As Long thd2 = 10
ReDim dif1(0 To 10, 0 To 10) As Variant '★1次元、2次元ともに、0〜10とする ReDim dif2(0 To 10, 0 To 10) As Variant '★1次元、2次元ともに、0〜10とする dif1(i, 0) = "123" dif2(i, 0) = "456"
If Not dif1(i, 0) = "-" And Not dif2(i, 0) = "-" Then If dif2(i, 0) > thd2 Or (dif1(i, 0) - dif2(i, 0)) > thd2 Then MsgBox "テスト2" End If End If End Sub
(マリオ) 2017/02/20(月) 17:52
If文は、Then までの全ての計算、評価を行います。だから、全部1行に書いた場合、全ての式を評価します。左側で条件から外れるから後は見なくても良い、と思っても、Then まで全ての評価を続けるのですよ。
(???) 2017/02/20(月) 17:58
半平太さん、nazoさん、まっつわんさん
テストコードをわかりやすく書くことができず逡巡しております。
申訳ありません。
???さん、マリオさん
>書いた本人が説明できない論理式は、人に直してもらうものではない..
その通りですね...言葉がありません。
dif1, dif2は何れも二つのセル値の差を入れているのですが、そのセル値が数値のみとは
限らないため数値以外の時は「-」を入れています。
それゆえに、
>If文は...左側で条件から外れるから後は見なくても良い、と思っても、Then まで全ての評価を続ける..
から、例1)は「型エラー」になるということですね。
ようやく理解できたように思います。
質問のレベルを上げるように努めますので、これからもよろしくお願いします。
(T17) 2017/02/20(月) 23:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.