• ベストアンサー

「Debug.Print i = i + 1」がFalseになる。

Sub test() Dim i As Long i = 0 Debug.Print i = i + 1 End Sub を実行すると False がイミディエイトウインドウに表示されます。 理由が知りたいです。 よろしくお願いします。

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

  • ベストアンサー
  • s-uzen
  • ベストアンサー率65% (2051/3118)
回答No.2

Printステートメントの outputlist並びの=が、代入式ではなく比較式と評価、実行されるためでしょうね。 演算子は式のリストに含められ、算術演算子、比較演算子、論理演算子等色々ありますが、代入記号はリスト項目にはありませんので、エラーとならないのは演算子とみなしているからですね。 Print i = i + 1 の結果は、0と1の比較なのでFalse Print i = i とすると、0と0の比較なのでTrue Print i, i + 1の場合は、変数と数式なので 0と1 という結果になるはずです。  

zxdaeg
質問者

お礼

すごくわかりやすいです。どうもありがとうございました。

その他の回答 (2)

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

i = i + 1 演算(その後の結果の代入)を優先して、その結果を、出してほしいのでしょうが、そうはなりません。 VB以外でも多くはそうだと思います iと i+1が等しいか、評価されて、FALSEかTRUEが返り、(この場合はいつも(iに関係なく)等しく無いから、いつもFALSE)、それが表示される。 結果を表示するdebugやMsgboxと使うと、=は真か偽かの判定の演算子の扱いです。Javaの場合=、==の代入と判定機能で記号が分かれているので、どうなるんだったかな。 http://www5c.biglobe.ne.jp/~ecb/java/01_06.html iの変数の型によってエラーになるので、エラーになる場合が多いかも。

zxdaeg
質問者

お礼

どうもありがとうございました。

  • tomo00223
  • ベストアンサー率34% (12/35)
回答No.1

Debug.Printの中に等式があります。これが問題なのでは? Debug.Print i + 1 なら動作するのではないでしょうか? もしくは、iの値に+1したものを保持したければ、 i = i + 1 Debug.Print i でも良いと思います。

zxdaeg
質問者

お礼

等式にするとこうなるのですか。参考になりました。