勤怠システム(勤給解決)の全日休暇取り込み用csvを自動で作成するマクロ



表に入力されたデータに従って

開始日から終了日までの連続データを作って

csvを自動作成するマクロ

下準備

マクロを入れるエクセルに「マクロ」という名前のシートを作成し、以下のような形式で元データとなる表を入力する。

「csv」という名前のシートを作成し先頭行を入力しておく。

コード

Sub 勤給解決用csv()
    Dim sourcews As Worksheet
    Dim lastrow As Long
    Dim i As Long
    Dim number As Long
    Dim nameStr As String
    Dim holiday
    Dim startDate As Date
    Dim endDate As Date
    Dim csvws As Worksheet
    Dim r As Long
    Dim currentCell As Range
    Dim newfilename As String
    
    'リストのワークシートを設定
    Set sourcews = Sheets("マクロ")
    
    ' 最終行を取得
    lastrow = sourcews.Range("A1").CurrentRegion.Rows.Count
    
    ' csvシートを指定
    Set csvws = Sheets("csv")
    '過去データを削除
    csvws.Range("A:H").CurrentRegion.Offset(1, 0).ClearContents
    
    ' 繰り返し
    For i = 2 To lastrow
        
        ' 入力データを指定
        With sourcews
            number = .Cells(i, 1)
            nameStr = .Cells(i, 2)
            holiday = .Cells(i, 3)
            startDate = .Cells(i, 4)
            endDate = .Cells(i, 5)
        End With
    
        'csvシートの入力行を取得
        r = csvws.Range("A1").CurrentRegion.Rows.Count + 1
    
        ' 新しいシートにデータを入力cells(r,1)を始点にした場合
        Set currentCell = csvws.Cells(r, 1)
            Do While startDate <= endDate
                currentCell.Value = startDate
                currentCell.Offset(0, 1) = Format(number, "0000000000")
                currentCell.Offset(0, 3) = holiday
                Set currentCell = currentCell.Offset(1, 0)
                startDate = startDate + 1
        Loop
        'ファイル名を設定
        newfilename = newfilename & "_" & nameStr
    Next
   
    ' シートをcsv形式で保存
    Dim csvFileName As String
    csvFileName = ThisWorkbook.Path & "\" & Format(Date, "yyyymmdd") & newfilename & ".csv"
    csvws.Copy
    ActiveWorkbook.SaveAs Filename:=csvFileName, FileFormat:=xlCSV
    ActiveWorkbook.Close False
    
    MsgBox "csv出力完了"
    
End Sub

注意点

使っているシステムに合わせて要編集