みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Do untilで判定されない

office2010
WORKシートのI4802セルに2019/08/28という日付データが登録されています
J2セルに2019/1/1の日付を設定し、その右セルに+1日ずつ設定するマクロ(カレンダ日付イメージ)で、上記WORKシートのI4802セルまでの日付を設定したい。

下記がそのマクロ
Sub test()

Rows("1:2").Select
Selection.ClearContents

Range("J2") = "2019/1/1"

Dim i As Long

Dim day As String

day = Worksheets("WORK").Range("I4802").Value

i = 11

Do Until Worksheets("Sheet2").Cells(2, i + 1) = day

Worksheets("Sheet2").Cells(2, i) = Worksheets("Sheet2").Cells(2, i - 1) + 1

i = i + 1

Loop

End Sub
上記を実行すると、ずっと計算して、2063/10/30までいって実行時エラーで停止します。

2019/08/28で終了しないのは何故でしょう?
日付判定になってると思うのですが、原因分からず。
また、その修正方法も教えて頂きたく

投稿日時 - 2019-03-19 13:28:40

QNo.9598396

暇なときに回答ください

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

単純なミスです
誤:Do Until Worksheets("Sheet2").Cells(2, i + 1) = day
正:Do Until Worksheets("Sheet2").Cells(2, i - 1) = day

+1にしているせいで空のセル=0と変数dayを比較しています。

投稿日時 - 2019-03-19 15:21:32

お礼

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

投稿日時 - 2019-03-19 19:01:13

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2019-03-19 17:24:16

お礼

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

投稿日時 - 2019-03-19 19:00:11

ANo.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

投稿日時 - 2019-03-19 17:07:28

お礼

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

投稿日時 - 2019-03-19 19:00:45

あなたにオススメの質問