【ExcelVBA】シート内容をCSV出力

概要

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