表に入力されたデータに従って
開始日から終了日までの連続データを作って
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
注意点
使っているシステムに合わせて要編集