エクセルマクロで、日付別にCSVを出力するVBAコードをご紹介します。
このページのマクロコードは、コピペで使えます。
ぜひお試しください!
日付別にCSVを分けて出力
以下のマクロを実行すると、CSVデータを日付ごとに出力します。
Sub 日付別のCSVを作成()
Dim MyPath As String
Dim myDic As Object
Dim myKey As Variant
Dim myList As Variant
Dim i As Long
Dim Q As Long
Dim Paste_Cnt As Long
'CSVの保存先
MyPath = ActiveWorkbook.Path
Set myDic = CreateObject("Scripting.Dictionary")
'データを配列に格納
myList = Range(Cells(2, 1), Cells(21, 3))
'重複しない日付を取得
For i = 1 To UBound(myList, 1)
If Not myDic.exists(myList(i, 2)) Then
myDic.Add Key:=myList(i, 2), Item:=myList(i, 2)
End If
Next
'重複しない日付を格納
myKey = myDic.keys
'日付ごとにループ
Paste_Cnt = 1
For i = 0 To UBound(myKey)
'新規ファイル作成
Workbooks.Add
'新規ファイルにデータ転記
For Q = 1 To UBound(myList)
If myList(Q, 2) = myKey(i) Then
With ActiveSheet
.Cells(Paste_Cnt, 1) = myList(Q, 1)
.Cells(Paste_Cnt, 2) = Format(myList(Q, 2), "yyyy/mm/dd")
.Cells(Paste_Cnt, 2).NumberFormatLocal = "yyyy/mm/dd"
.Cells(Paste_Cnt, 3) = myList(Q, 3)
End With
Paste_Cnt = Paste_Cnt + 1
End If
Next Q
'CSV作成
ActiveWorkbook.SaveAs Filename:= _
MyPath & "\" & Format(myKey(i), "yyyymmdd"), FileFormat:=xlCSV, Local:=True
'CSVを閉じる
Application.DisplayAlerts = False
ActiveWorkbook.Close True
Application.DisplayAlerts = True
Next i
'開放
Set myDic = Nothing
End Sub
マクロ実行前
B列の日付ごとにデータを分けて、CSVを作成したいと思います。
マクロ実行後
自動出力したCSVファイルです。
ファイル名は該当の日付から付けています。
出力したCSVファイルの中身は下図の通りです。
日付ごとにデータが分かれています。
CSVファイルを作成した際に、
日付の表示形式が逆になってしまう現象が発生しました。
以下コードを追加して表示形式を指定することで、解決できました!
※上でご紹介しているコードに含まれています。
[.Cells(Paste_Cnt, 2).NumberFormatLocal = “yyyy/mm/dd”]
この記事がお役に立ちますと幸いです。
【エクセルマクロ】CSV処理を自動化:超便利10選
...
「たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】」
「5時間かかる作業が3時間でできます」ではなく「1秒で終わらせます」へ
毎日の業務を瞬時に終わらせるしくみを解説
リンク