アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

Printステートメントの outputlist並びの=が、代入式ではなく比較式と評価、実行されるためでしょうね。


演算子は式のリストに含められ、算術演算子、比較演算子、論理演算子等色々ありますが、代入記号はリスト項目にはありませんので、エラーとならないのは演算子とみなしているからですね。

Print i = i + 1 の結果は、0と1の比較なのでFalse
Print i = i とすると、0と0の比較なのでTrue
Print i, i + 1の場合は、変数と数式なので 0と1
という結果になるはずです。
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/29 20:34

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の変数の型によってエラーになるので、エラーになる場合が多いかも。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/29 20:34

Debug.Printの中に等式があります。

これが問題なのでは?
Debug.Print i + 1
なら動作するのではないでしょうか?
もしくは、iの値に+1したものを保持したければ、
i = i + 1
Debug.Print i
でも良いと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/29 20:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!