まず、常に Option Explicit を使用することをお勧めします。これは、MS VB ウィンドウのメニューから将来のプロジェクトで有効にすることができます: [ツール] > [オプション] > [エディター] (タブ) > [変数宣言が必要] (チェックボックス)
ビジネスに移ります: 範囲 (この例では B2:B25 と C2:C25) を日付 + 時間で 1 時間刻みで埋めたい場合は、次のようなものを使用することをお勧めします。
Option Explicit
Private Sub Workbook_Open()
Dim SelRange As Range
Dim b As Range
Dim dtDate As Date
Dim intHours As Long
'Enter the starting date and time
dtDate = InputBox("Start date", , Date)
'Initate our hours counter
intHours = 0
'Assign a worksheet range for our date-time range
Set SelRange = Range("B2:B25")
'Write the date-time range with 1 hour increments
For Each b In SelRange
b.Value2 = dtDate + TimeSerial(intHours, 0, 0)
'24 hours later in the cell to the right of this
b.Offset(0, 1).Value2 = dtDate + 1 + TimeSerial(intHours, 0, 0)
intHours = intHours + 1
'To avoid an overflow in the TimeSerial function the intHours are keps smaller than then Integer maximum
If intHours > 24 Then
intHours = intHours - 24
dtDate = dtDate + 1
End If
Next
End Sub
あなたが日付から始めるとおっしゃっているように、私は InputBox の日付 (時間なし) から始めます。
これを限られた回数だけ繰り返したい場合は、適用する範囲を制限することでこれを行うことができます (この場合は B2:B25)。ループは一番下に到達すると停止します。
C 列に 24 時間後の日時が自動的に入力されるようになりました。将来の日付が必要な場合は、C 列の行の Timeserial 部分をスキップします。これを 1 時間先にしたい場合は、行を次のように変更します。
b.Offset(0, 1).Value2 = dtDate + TimeSerial(intHours +1, 0, 0)