効率化:一定時間間隔のyyyymmddhhmmssテストデータ作成VBA
テストデータを作成するときに、時間の項目で一定時間間隔のyyyymmddhhmmssを準備する必要がありました。
例えば、2023/3/22 00:00:00から1時間ごとだと、
20230322000000、20230322010000、20230322020000 ・・・・
1時間ごとだとまだ手動でできるのですが、これが30秒間隔を7日分となると
途方もない作業になってくるため、簡単に作れるようにVBAツールを作ろうと思いました。
作ったもの
TOP画面で開始時間・終了時間・時間間隔を設定します。
時間間隔はs(秒)、m(分)、h(時間)がプルダウンで選択できます。
設定後、テストデータ作成ボタンを押すと、テストデータ画面にテストデータが表示されます。
コード
Sub createBtn_Click()
Dim wsTop As Worksheet
Dim wsData As Worksheet
Dim startTime As String
Dim endTime As String
Dim interval As Long
Dim intervalUnit As String
Dim strYear As String, strMonth As String
Dim strDay As String, strHour As String, strMinute As String
Dim strSec As String
Dim i As Long
Dim StringToDate As String
Dim setDate As String
Set wsTop = Worksheets("TOP")
Set wsData = Worksheets("テストデータ")
startTime = wsTop.Range("D5").Value
endTime = wsTop.Range("D7").Value
interval = wsTop.Range("D9").Value
intervalUnit = wsTop.Range("E9").Value
'引数として受け取った日付時刻文字列(YYYYMMDDhhmmss)を
'年、月、日、時、分、秒にバラして各変数に代入
strYear = Left(startTime, 4)
strMonth = Mid(startTime, 5, 2)
strDay = Mid(startTime, 7, 2)
strHour = Mid(startTime, 9, 2)
strMinute = Mid(startTime, 11, 2)
strSec = Mid(startTime, 13, 2)
'分解したものをYYYY/MM/DD HH:MM:SSに作り変えて日付型に変換して返す
StringToDate = CDate(strYear & "/" & strMonth & "/" & strDay _
& " " & strHour & ":" & strMinute & ":" & strSec)
wsData.Cells.ClearContents
setDate = startTime
i = 1
Do While setDate <= endTime
wsData.Cells(i, 1).Value = setDate
StringToDate = DateAdd(intervalUnit, interval, StringToDate)
setDate = Format(StringToDate, "yyyymmddhhnnss")
i = i + 1
Loop
MsgBox "処理が完了しました。"
End Sub
参考:
まとめ
今回は自分だけが使う用なので、エラー処理とかは書いていないですが、他の人に配るときは、各項目ブランクチェックと、開始時間<終了時間になっているかチェックも追加したいと思います。
あと、テストデータが多すぎると固まりそうなので、何件まで行ったらLoopを抜ける処理も追加した方がいいかも。
今回作成したテストデータの結果が、20,161件ありヒエーとなりました。
(これをDynamoDBに登録するのか。。。)
この記事が気に入ったらサポートをしてみませんか?