【VBA】表をcsvファイルへ出力する

前提

・表のあるシート名は「サンプルシート」
・表はB列~D列

サンプルプログラム概要

・csvファイルが存在する場合は書き込み(追記ではなく)
・csvファイルが存在しない場合は新規作成
・csvファイルの各項目はダブルコーテーション付き

サンプルプログラム

'変数の宣言を必須
Option Explicit

Sub Sample()

    Const SHEET_NAME As String = "サンプルシート"
    Const CSV_FILE_PATH As String = "C:\Users\user\Desktop\temp\"
    Const CSV_FILE_NAME As String = "sample.csv"
    Const NO_COLUMN As Integer = 2
    Const NAME_COLUMN As Integer = 4
    Const START_ROW As Integer = 2
    
    Dim ws As Worksheet
    Dim endRow As Double
    Dim arrayData As Variant
    
    Set ws = ThisWorkbook.Worksheets(SHEET_NAME)
    
    '最終行を取得
    endRow = ws.Cells(START_ROW, NO_COLUMN).End(xlDown).Row
    
    '表を配列に格納
    With Worksheets(SHEET_NAME)
        arrayData = .Range(.Cells(START_ROW, NO_COLUMN), _
                           .Cells(endRow, NAME_COLUMN))
    End With
    
    'csvファイルの作成
    Call createCsvFile(arrayData, CSV_FILE_PATH & CSV_FILE_NAME)
    
    '後片付け
    Set ws = Nothing

End Sub

'csvファイルの作成
Private Function createCsvFile(arrayData As Variant, filePath As String)
    
    Dim fso As Object
    Dim csvFile As Object
    Dim i As Double
    Dim line As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'CSVファイルを作成
    '書き込みモード(2)で開く(ファイルが存在する場合は追記ではなく1から書き込み)
    'ファイルが存在しない場合は新規作成(True)する
    'システムの既定値(-2)で開く
    Set csvFile = fso.OpenTextFile(filePath, 2, True, -2)
    
    '配列の要素数で繰り返し
    For i = LBound(arrayData) To UBound(arrayData)

        line = """" & arrayData(i, 1) & """" & "," & _
               """" & arrayData(i, 2) & """" & "," & _
               """" & arrayData(i, 3) & """"
        'csvファイルへ出力
        csvFile.WriteLine line  

    Next i
    
    '後片付け
    Set csvFile = Nothing
    Set fso = Nothing
    
End Function

結果

タイトルとURLをコピーしました