概要
VBAでアクティブシートの内容をCSV出力したいときのコードを紹介します。
処理速度を意識してFileSystemObjectを使用します。
シート内容を変数にまとめ、一括でCSV出力します。
【 FileSystemObject を選択した理由】
Open Print:1行ずつの書き込みになるので、複数行の場合に処理に時間がかかります。
SaveAs:ワークブックを新規に作成する必要があるため時間を要します。
コード
VBA
Sub WriteCSV()
'行数、列数セット
Dim MaxRow As Long: Dim MaxColumn As Long
MaxRow = ActiveSheet.Cells(1, 1).End(xlDown).Row
MaxColumn = ActiveSheet.Cells(1, 1).End(xlToRight).Column
'シート内容を変数に格納
Dim j As Long: Dim k As Long: Dim outStr As String
j = 1
Do While j <= MaxRow
k = 1
Do While k <= MaxColumn
outStr = outStr & ActiveSheet.Cells(j, k).Text & ","
k = k + 1
Loop
outStr = outStr & vbCr
j = j + 1
Loop
'出力先指定
Dim FilePath As String
FilePath = ActiveWorkbook.Path & "\data.csv"
'CSV出力
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.CreateTextFile(FilePath)
.Write outStr
.Close
End With
Set FSO = Nothing
End Sub