Sub nenkan_5gatsu_ok()
Dim d As Date
Dim c As Long
d = #1/1/2015#
c = 2
Do While Year(d) = 2015
If Month(d) = 5 Then
Range("A" & c).Value = d
Range("B" & c).Value = WeekdayName(Weekday(d), True)
c = c + 1
End If
d = DateAdd("d", 1, d)
Debug.Print d
Loop
End Sub
Sub nenkan_5gatsu_ng()
Dim d As Date
Dim c As Long
d = #1/1/2015#
c = 2
Do While Year(d) = 2015
If Month(d) = 5 Then
Range("A" & c).Value = d
Range("B" & c).Value = WeekdayName(Weekday(d), True)
c = c + 1
d = DateAdd("d", 1, d)
End If
Debug.Print d
Loop
End Sub
ケイジさんの投稿
(投稿ID: 5430)
おはようございます。
カレンダー作成マクロの学習で躓いています。
d = DateAdd("d", 1, d)の配置場所について理解に至りません。
dをif構文の内側に配置すると、なぜ永久ループしてしまうのでしょうか。
if構文の外側、内側で、なぜ異なる結果になるのかどうしても理解できません。
ご教示のほどよろしくお願いいたします。
小川 慶一さんのコメント
(コメントID: 8021)
>dをif構文の内側に配置すると、なぜ永久ループしてしまうのでしょうか。
>if構文の外側、内側で、なぜ異なる結果になるのかどうしても理解できません。
こういうときは、デバッグしながらプログラムを実行すると良いです。
ということで、サンプルコードを2つ用意しました。
イミディエイトウインドウへの出力を見ながら、以下の2つをステップイン実行してみてください。
それでも分からない場合は、またご質問いただければと。
よろしくお願いします。
ケイジさんのコメント
(コメントID: 8022)
ご返信くださりありがとうございます。
イミディエイトウインドウへの出力を見ながら、2つをステップイン実行してみると、両者の違いを理解することができました。
2015年1月1日から日付が更新されないループに嵌っていたのですね。
こういった時にイミディエイトウィンドウは役立つと身をもって認識することができました。
ありがとうございました。
小川 慶一さんのコメント
(コメントID: 8023)
よい学びになったようで、良かったです (^^*
ひきつづき、よろしくお願いいたします。