• ベストアンサー

VB IF なぜ構文エラーにならないのですか?

Dim x, y, z As Integer x = 1 y = 1 z = 1 If x = y And y = z Then MessageBox.Show("OK") End If 3つの値が同じならアラートを出したいのです。このソースでできるかとおもいます。。。 しかし・・・・ If x = y = z Then MessageBox.Show("OK") End If とするとアラートが出ません。関数的に使い方が間違っているのでしょうか? もしそうならなぜ構文エラーが出ないのでしょうか? よろしくお願いします。 言語Microsoft Visual Basic 2008 Express Edition

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

VB6ベースでは下記のようなのをやってみた。 Sub test01() x = 1 y = 3 z = 3 x = y = z MsgBox x MsgBox y MsgBox z End Sub True 3 3となる。 ーー VB.NETの場合も VB2008のある解説書にも x=y=1の例で 「一番左に有る「=」は代入となります。それより右に有る「=」は比較演算子と看做されます。 y=1の部分が比較演算となり、yが規定値の0なのでY=1はFALSEになり、その値をXに代入します。」 それをIF 文でTRUEかFALSEか聞くことになります。 ーーー 比較演算子と代入演算子の切り代わりが有るようだ。 こういうのは理論的に面白いが、実際仕事などで活用する人は少ないのでは。 VB経験者は、X=Y=ZがX=Y且つY=Zだと思って居る人は無いのでは。 X=A Or Bの書き方さえ許してくれない。 ーー 3者比較は Sub test01() x = 3 y = 1 Z = 3 If x = y And y = Z Then MsgBox "TRUE" Else MsgBox "FALSE" End If End Sub のようにしないといけないということ。

keniti_246
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

先に「y = z」が「true」と評価されます。つぎに、この評価と結果である「true」とxが評価されるので、この式は成り立たないのです。 構文としてはエラーがでない正当な式ですが、妥当な式でない(望まない結果である)ですね。

keniti_246
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

専門家に質問してみよう