- ベストアンサー
「Debug.Print i = i + 1」がFalseになる。
Sub test() Dim i As Long i = 0 Debug.Print i = i + 1 End Sub を実行すると False がイミディエイトウインドウに表示されます。 理由が知りたいです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Printステートメントの outputlist並びの=が、代入式ではなく比較式と評価、実行されるためでしょうね。 演算子は式のリストに含められ、算術演算子、比較演算子、論理演算子等色々ありますが、代入記号はリスト項目にはありませんので、エラーとならないのは演算子とみなしているからですね。 Print i = i + 1 の結果は、0と1の比較なのでFalse Print i = i とすると、0と0の比較なのでTrue Print i, i + 1の場合は、変数と数式なので 0と1 という結果になるはずです。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
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の変数の型によってエラーになるので、エラーになる場合が多いかも。
お礼
どうもありがとうございました。
- tomo00223
- ベストアンサー率34% (12/35)
Debug.Printの中に等式があります。これが問題なのでは? Debug.Print i + 1 なら動作するのではないでしょうか? もしくは、iの値に+1したものを保持したければ、 i = i + 1 Debug.Print i でも良いと思います。
お礼
等式にするとこうなるのですか。参考になりました。
お礼
すごくわかりやすいです。どうもありがとうございました。