VBAのネストしているFor文が期待通りに実行されません。
以下に現状をまとめました。
【作業環境】
Windows 7 Professional
Excel 2007
【やりたいこと】
テンプレートシート(オブジェクト名:wsTemplate2)
→E2セルから右に開始日~終了日までを表示
【困っていること】
テンプレートシートのE2セルから右に開始日~終了日までが表示されない。
現状は以下の通り。
①E2~AD2まで「1900/1/31」が入る
②本来なら日付はE2~AI2まで入る。データの個数が4つ足りない
【参照データ】
カレンダーシート(オブジェクト名:wsDateList)
→D2セル「2021/01/01」(開始日)
→E2セル「2021/01/31」(終了日)
【試したこと】
・For文を入れ子にぜずにそれぞれの処理をイミディエイトで確認したところ、
期待通りの処理になった
→入れ子にすると期待通りの処理にならない
イミディエイトで動きを確認したところ、
入れ子になっているFor文のどちらも正しく機能していません。
日付は2021/01/28から始まっており、
21個ずつ同じものが表示されています。
列の移動も9(I列)から始まっていますが、
テンプレートシートには5(E列)から表示されています。
VBAの勉強中であるため分かりにくい箇所があるかもしれませんが、
どうぞよろしくお願いいたします。
Public Sub template() Dim dateStartDate As Date '開始日 Dim dateEndDate As Date '終了日 Dim loncntDay As Long '開始日~終了日の日数カウント用変数 Dim Dayone As Date '日付用変数 Dim cntColl As Long '列変数 dateStartDate = wsDateList.Range("D2") '「開始日」 dateEndDate = wsDateList.Range("E2") '「終了日」 loncntDay = DateDiff("d", dateStartDate, dateEndDate) '「開始日」~「終了日」を日単位で数える For Dayone = 0 To loncntDay '開始日から1日単位で増えていく(※開始日も表示したいので0からスタート) For cntColl = 5 To loncntDay '列移動 wsTemplate2.Cells(2, cntColl).Value = DateAdd("d", 1, Dayone) '1~開始日-終了日の日数 Debug.Print DateAdd("d", Dayone, dateStartDate) Debug.Print "2, "; cntColl Next cntColl Next Dayone End Sub
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/30 05:26