- ベストアンサー
Do untilで判定されない
- office2010
- WORKシートのI4802セルに2019/08/28という日付データが登録されています。J2セルに2019/1/1の日付を設定し、その右セルに+1日ずつ設定するマクロ(カレンダ日付イメージ)で、上記WORKシートのI4802セルまでの日付を設定したい。
- 上記のマクロを実行すると、ずっと計算して、2063/10/30までいって実行時エラーで停止します。なぜ2019/08/28で終了しないのか、原因が分かりません。修正方法も教えて頂きたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単純なミスです 誤:Do Until Worksheets("Sheet2").Cells(2, i + 1) = day 正:Do Until Worksheets("Sheet2").Cells(2, i - 1) = day +1にしているせいで空のセル=0と変数dayを比較しています。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
すでに原因はご指摘がある。それで済なんだが。 ーー この程度のことなら、すぐ質問するのでなく、色々変数を確認して、やってみれば、原因の箇所わかることでは。 繰り返しが、すっぽ抜けるなら、ストパーの値がおかしいだけだろう。 普通は、繰り返しの終値が、注目点かな。日付の場合は、日付シリアル値という 整数(1900年来の順序数。エクセル特有の考え方)だから、文字列になっていないかなど注意するとか、関数で日付シリアル値に確実には変換して、Msgboxでも出して確認しておくとか。 Sub test() Rows("1:2").Select Selection.ClearContents Cells(2, 10) = "2019/1/1" Dim i As Long Dim day As String Days = DateValue("2019/08/28") 'DoUntiliで、式でなく、変数に一旦持たせたもので判別するのもおすすめ i = 11 '--- Do Until Worksheets("Sheet2").Cells(2, i - 1) > Days ’--前回の繰り返しで、次のために1を足しているから、直前はi-1で見る Worksheets("Sheet2").Cells(2, i) = Worksheets("Sheet2").Cells(2, i - 1) + 1 Columns(i).AutoFit i = i + 1 Loop '--- End Sub
お礼
回答ありがとうございます。そう、式の結果をdebug.printで見られなかったのです。変数に一旦持たせたもので判別、これでやろうと思います。
- watabe007
- ベストアンサー率62% (476/760)
参考に Sub test() Dim i As Long Dim day As Date i = 10 day = Worksheets("WORK").Range("I4802").Value With Worksheets("Sheet2") .Rows("1:2").ClearContents .Range("J2").Value = "2019/1/1" Do Until .Cells(2, i).Value = day i = i + 1 .Cells(2, i) = .Cells(2, i - 1) + 1 Loop End With End Sub
お礼
回答ありがとうございます。すっきりしたマクロで分かりやすいです。
お礼
回答ありがとうございます。なるほど助かりました。