• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Do untilで判定されない)

Do untilで判定されない

このQ&Aのポイント
  • office2010
  • WORKシートのI4802セルに2019/08/28という日付データが登録されています。J2セルに2019/1/1の日付を設定し、その右セルに+1日ずつ設定するマクロ(カレンダ日付イメージ)で、上記WORKシートのI4802セルまでの日付を設定したい。
  • 上記のマクロを実行すると、ずっと計算して、2063/10/30までいって実行時エラーで停止します。なぜ2019/08/28で終了しないのか、原因が分かりません。修正方法も教えて頂きたいです。

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

単純なミスです 誤:Do Until Worksheets("Sheet2").Cells(2, i + 1) = day 正:Do Until Worksheets("Sheet2").Cells(2, i - 1) = day +1にしているせいで空のセル=0と変数dayを比較しています。

3620313
質問者

お礼

回答ありがとうございます。なるほど助かりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

すでに原因はご指摘がある。それで済なんだが。 ーー この程度のことなら、すぐ質問するのでなく、色々変数を確認して、やってみれば、原因の箇所わかることでは。 繰り返しが、すっぽ抜けるなら、ストパーの値がおかしいだけだろう。 普通は、繰り返しの終値が、注目点かな。日付の場合は、日付シリアル値という 整数(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

3620313
質問者

お礼

回答ありがとうございます。そう、式の結果をdebug.printで見られなかったのです。変数に一旦持たせたもので判別、これでやろうと思います。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

参考に 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

3620313
質問者

お礼

回答ありがとうございます。すっきりしたマクロで分かりやすいです。

関連するQ&A