解決済み

Do untilで判定されない

  • 暇なときにでも
  • 質問No.9598396
  • 閲覧数122
  • ありがとう数3
  • 気になる数1
  • 回答数3
  • コメント数0

お礼率 86% (156/181)

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で終了しないのは何故でしょう?
日付判定になってると思うのですが、原因分からず。
また、その修正方法も教えて頂きたく

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

  • 回答No.1

ベストアンサー率 50% (244/487)

Excel(エクセル) カテゴリマスター
単純なミスです
誤:Do Until Worksheets("Sheet2").Cells(2, i + 1) = day
正:Do Until Worksheets("Sheet2").Cells(2, i - 1) = day

+1にしているせいで空のセル=0と変数dayを比較しています。
お礼コメント
3620313

お礼率 86% (156/181)

回答ありがとうございます。なるほど助かりました。
投稿日時 - 2019-03-19 19:01:13

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 28% (4471/15907)

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

お礼率 86% (156/181)

回答ありがとうございます。そう、式の結果をdebug.printで見られなかったのです。変数に一旦持たせたもので判別、これでやろうと思います。
投稿日時 - 2019-03-19 19:00:11
  • 回答No.2

ベストアンサー率 62% (438/697)

Excel(エクセル) カテゴリマスター
参考に
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

お礼率 86% (156/181)

回答ありがとうございます。すっきりしたマクロで分かりやすいです。
投稿日時 - 2019-03-19 19:00:45
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ