見出し画像

効率化:一定時間間隔のyyyymmddhhmmssテストデータ作成VBA

テストデータを作成するときに、時間の項目で一定時間間隔のyyyymmddhhmmssを準備する必要がありました。
例えば、2023/3/22 00:00:00から1時間ごとだと、
20230322000000、20230322010000、20230322020000 ・・・・
1時間ごとだとまだ手動でできるのですが、これが30秒間隔を7日分となると
途方もない作業になってくるため、簡単に作れるようにVBAツールを作ろうと思いました。

作ったもの

VBAツールTOP画面

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に登録するのか。。。)



この記事が気に入ったらサポートをしてみませんか?