• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS VBAが分からない!この問題ですが)

ACCESS VBAのメッセージボックスに表示される日付について解説

このQ&Aのポイント
  • ACCESS VBAの勉強をはじめました。下のプロシージャを実行するとメッセージボックスに「2018/08/30」と出るようですが、なんでそうなるのかが分からない。
  • Loopは繰り返し処理を行うため、繰り返し回数を指定する必要があります。一方、Whileは指定した条件が真である間、処理を繰り返します。
  • 今回のプロシージャでは、retに初期値として「2018/08/29」が代入され、Doループが開始されます。ループの中でretに1日ずつ加算し、iも1ずつ増やしていきます。しかし、条件i > 3が最初から偽であるため、ループは一度も実行されず、retには初期値のままとなります。その後、MsgBoxでretの値が表示されます。

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

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.2

「Do (作業) Loop While (条件) 」の実行順序は以下の通り。 (1) Do を実行する。すなわち (作業) をする。 (2) While (条件) が成立しているなら、(1)に戻る。 ということでプログラムを見てみると。 ----ここから 変数 ret と i を宣言し、ret にだけ値(2018年8月29日)を入れています。※アメリカ式表記 変数宣言だけされた i には、最初は 0 が入っています。 Doループの本文、日付変数retに1を足すとは、「日付を1日進める」ことを意味します。 なので、(2018年8月29日)→(2018年8月30日)に変化します。 一方、i は 1 足されて、i=1 になります。 ここで条件判断、「i が3より大きければ再度ループせよ」と書いてあるわけですが、現時点でiは3以下です。 なのでループせず、次の命令に進みます。 Msgbox 命令でretの内容が表示されます。 ----ここまで 結局、Loop と書いてはありますが、1回しか実行されなかったという訳です。 まあこのプログラムではそうでないと困りますね。 仮に i=5 とかでループをはじめてしまったら、「iに1足したらさらに大きな数になる」→「i>3なのでさらにループする」となって終了しません。永久ループです。 意味のない終了条件であるとも言えます。 ---- ひょっとして、近くに Do While の説明も書いてあるでしょうか? Do Whileループでは、 「Do While (条件) (作業) Loop 」と書き、 (1) While の (条件) が成立しているなら、(2)を実行する。 (2) (作業) をして、(1)に戻る。 となっています。 もし同じように Dim ret As Date, i As Long ret = #8/29/2018# Do While i>3 ret = ret + 1 i = i + 1 Loop MsgBox ret こんな風になっていた場合。 はじめから i>3 が不成立ですので、ループ内部は『一度も実行されません』。 最後の Msgbox では「2018/08/29」が表示されるはずです。 その様に、Whileが先にある場合は「プログラムに書いてあっても、実行されない」という動作をすることもある訳です。 そういう違いを示したかった、サンプルなのかもしれません。

ohime777
質問者

お礼

とても丁寧に説明してくださり理解でき本当にうれしいです!!有難うございます。数日間悩んでました。感謝!!

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

No1の蛇足です。 もし、iが3以上の状態でこのDo~Loopが実行されたら(iが加算され続けますから)永久ループやオーバーフローになると思われますので、iの上限も条件に付けくわえないと怖いやり方だと思います。

ohime777
質問者

お礼

ありがとうございます!とても勉強になります!!感謝!!

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

Loop While i > 3 iが3より大きければLoopを繰り返す条件なので、現状はiが1の時に条件判定が行われますから、実際にLoopはしないということになります。

専門家に質問してみよう