環境:VB6
はじめまして。大変初歩的な質問で恐縮ですが、
4つの変数の値が一緒でなければ、エラーとし、
4つの変数の値が一緒なら次の処理に移行するとしたいのですが、
判定がとても見苦しく、もっと簡単に判定できないかと思いまして。。
If a <> b Then End
If b <> c Then End
If c <> d Then End
If d <> a Then End
↓ ここから処理 ↓
アドバイスお願いします。
一例として:
If (a = b) And (b = c) And (c = d) Then
'次の処理
Else
'エラー処理
End If
早々のご回答ありがとうございます。
次の処理が結構長くなりそうなので、
次の処理をIf文のなかに入れたまま記述したくなかったのですが
(インデント関係で行数制限(=100)に引っかかりやすくなるため)
魔界の仮面弁士様のアドバイスを少しいぢって試したのですが
If Not(a = b) And Not(b = c) And Not(c = d) Then
'エラー処理
End If
'次の処理
違う値が入っていても次の処理へはしってしまいました。
記述方法が間違っているのでしょうか?
エラー処理は走らずに次の処理にいったということですか?
エラー処理も次の処理も流れたということであれば、
魔界の仮面弁士さんの例通りにしたほうが一番わかりやすい
かと思います。
それで行うなら、弁士さんの書いている通りにElseを
用いるか、
If Not(a = b) And Not(b = c) And Not(c = d) Then
'エラー処理
Exit Sub '関数ならばExit Function
End If
'次の処理
とでもするべきかと。
ちなみに、
Select Case True
Case a <> b, b <> c, c <> d, d <> a
' エラー処理
Exit Sub
End Select
という書き方も出来ます。
試しているうちに出来ました。
If (a <> b) Or (b <> c) Or (c <> d) Then
'エラー処理
End If
'次の処理
これって(a <> d)を判定する必要はないですよね?
一応すべての変数に違う値を入れたので大丈夫だとは思いますが。
aとdが違えば、他でも引っかかってしまいますもんね。
単純な処理のようにみえて色々考えてしまいました(汗)
魔界の仮面弁士様ありがとうございました。
If ((A = B) And (B = C) And (C = D)) Then
Else
'エラー処理
End If
'次の処理
とするか、
If ((A = B) And (B = C) And (C = D)) = False Then
'エラー処理
End If
'次の処理
エラー処理が1行で済むのなら
If ((A = B) And (B = C) And (C = D)) Then Else 'エラー処理
'次の処理
又は
If ((A = B) And (B = C) And (C = D)) = False Then 'エラー処理
'次の処理
>KG様、K.J.K.様
アドバイスありがとうございます。
エラー処理の後にはExit Subを入れております。
記述不足で申し訳ありません。
下記の場合だと、エラー処理がはしらず、次の処理へいってしまいました。
If Not(a = b) And Not(b = c) And Not(c = d) Then
'エラー処理
Exit Sub
End If
テストの仕方が間違っていたんですかね・・・(汗)
K・今川様、ご回答ありがとうございます。
If ((A = B) And (B = C) And (C = D)) = False Then
'エラー処理
End If
↑こんなことが判定できるんですね!
知りませんでした。一番スマートな感じに思えます。
If ((A = B) And (B = C) And (C = D)) Then
Else
'エラー処理
End If
↑これは一応思い浮かびましたが、レビューに引っかかりそうだったので・・・。
いいアドバイスありがとうございました。
> 下記の場合だと、エラー処理がはしらず、次の処理へいってしまいました。
> If Not(a = b) And Not(b = c) And Not(c = d) Then
> テストの仕方が間違っていたんですかね・・・(汗)
テストではなく、回答にあった条件が間違っているような…。
これだと、a=1 : b=1 : c=2 : d=2 の時にエラーになりません。
> 単純な処理のようにみえて色々考えてしまいました(汗)
正常時の条件が、
If (A = B) And (B = C) And (C = D) Then
なのですから、これをエラー時の条件としたいなら、
単純に、結果の True / False を反転させるだけですよね。
つまり、
If Not ( (A = B) And (B = C) And (C = D) ) Then
ということです。【案1】
で、これをド・モルガンの法則に従って展開すると、
If Not (A = B) Or Not (B = C) Or Not (C = D) Then
のように書き換えられるので、これを整理したものが、
> 試しているうちに出来ました。
> If (a <> b) Or (b <> c) Or (c <> d) Then
という結果になるわけです。【案2】
# 案1 / 案2 のどちらを使っても同じこと。
魔界の仮面弁士様、丁寧なご説明有難う御座いました。
> If Not(a = b) And Not(b = c) And Not(c = d) Then
> これだと、a=1 : b=1 : c=2 : d=2 の時にエラーになりません。
何故、a=1 : b=1 : c=2 : d=2の際にエラーにならないのか、
今はまだあまり理解できておりませんが、
(久々にコーディングして頭がオーバフローしてます 苦笑)
こちらは自分で理解できるまで考えたいと思います。
今やっとこさ '次の処理 が終わったところです。
色々と為になる解説をしていただき、ほんと感謝しております。
有難う御座いました。
If Not(a = b) And Not(b = c) And Not(c = d) Then
だと、
Not(a = b)
Not(b = c)
Not(c = d)
の一つでもFalseになると(同じ数値だと)条件としてFalseになるからです。
a=1 : b=1 : c=2 : d=2だと順にFalse,True,Falseとなってしまいます。
夏休みさんの希望としては一つでもTrueなら、、ということなので、
魔界の仮面弁士さんの仰るとおり
Not (A = B) Or Not (B = C) Or Not (C = D)
となり
夏休みさんの導き出した
a<>b Or b<>c Or c<>d
となるわけですね。
ツイート | ![]() |