CSVファイル出力(VBA)

VBAでファイルを出力するケースもよくあります。

  • CSVファイル出力
'変数定義
Dim fso As Object
Dim ts As Object
Dim csvData As String
Dim lineData As String
Dim row As Range
Dim cell As Range
Dim itemData As Variant
Dim regionSpan As Range
Dim fileName As String

'ファイルシステムオブジェクトをインスタンス化する。
Set fso = CreateObject("Scripting.FileSystemObject")

'ファイル名を指定する
fileName = "E:\test.csv"

'保存するCSVファイルを開く
'2:書き込みモード
'True:存在しない場合は新規ファイルを作成する
'0:文字コード(ASCII(Shift-JIS))
Set ts = fso.OpenTextFile(fileName, 2, True, 0)

'データ範囲を自動取得する
Set regionSpan = Range("A1").CurrentRegion

'CSVに出力するセルの行、列範囲をループする。
For Each row In regionSpan.Rows

    lineData = ""

    '対象項目(列)を編集する
    For Each cell In row.Columns

        'セルの値を取得
        itemData = cell.Value

        'カンマ区切りとする
        If lineData = "" Then

            lineData = itemData
        Else
            lineData = lineData & "," & itemData
        End If
    Next
    
    '改行する。
    If csvData = "" Then

        csvData = lineData
    Else
        csvData = csvData & vbCrLf & lineData
    End If
Next

'出力データを書き込む
ts.Write (csvData)

'ファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing

出力対象のセルの範囲(行、列)は、今回は、CurrentRegionを使っています。これを使うと、自動的にEXCEL側でデータ枠の範囲を取得してくれますので、便利ですが、業務仕様で条件によるセルの範囲が必要な場合が多い為、あまり使用しません。Write #を使って、カンマ区切りの出力もできますが、実業務では、項目毎に編集仕様が入り、加工が必要なことが多い為、上記のように手動で編集した方が汎用性が高いです。