Excel VBAでCSVファイルを出力!業務効率化のための自動化マクロ#0003

VBA

Excel VBAでCSVファイルを出力!業務効率化のための自動化マクロ

はじめに

ExcelVBAを活用すると、シートや特定の範囲に入力されたデータを簡単にCSVファイルとして書き出すことができます。業務では、システムにデータを取り込む際にCSV形式での出力が求められることがよくあります。このVBAマクロを利用することで、作業を自動化し、効率を大幅に向上させることが可能です。


CSVファイルとは?

CSVファイルは、テキストデータがカンマで作られた形式のファイルです。これは
、 Excelやその他の多くのシステムで広く使用されており、色付け保存が出来ない代わりに、ファイルが軽いなど、異なるシステム間でデータを扱う際に利用されています。


VBAマクロでCSVファイルを保存する

ExcelのシートデータをCSV形式で出力するために、VBAの「SaveAs」メソッドを
活用します。このメソッドを使うことで、Excelブック全体や特定のシートをCSV
ファイルとして簡単に保存することができます。

VBAマクロ「SaveAs」でCSVファイル保存

ActiveWorkbook.SaveAs Filename:="C:\path\filename.csv", FileFormat:=xlCSV

VBAマクロ実装例 CSVファイル保存

まずは、Excelブック全体をCSVファイルとして書き出すVBAマクロをご紹介します。

ブック全体をCSVファイルとして保存

Sub ExportToCSV()
    ' アクティブなブックをCSV形式で保存
    ActiveWorkbook.SaveAs Filename:="C:\Users\username\Documents\exported.csv", FileFormat:=xlCSV
    
    MsgBox "CSVファイルが作成されました。"
End Sub

ポイント:

  • ActiveWorkbook.SaveAs メソッドを使って、アクティブなブックをCSV形式で保存しています。
  • FileFormat:=xlCSV でファイル形式をCSVに指定しています。

特定のシートや範囲をCSVファイルに保存する

実務を想定した応用編で、特定シートや範囲のデータを、CSVファイルに保存する方法をご紹介します。このマクロでは、指定したシート内のデータをCSVとして保存します。

特定のシートをCSVファイルに書き出す

Sub ExportSheetToCSV()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' シートをアクティブにしてからCSVとして保存
    ws.Copy
    ActiveWorkbook.SaveAs Filename:="C:\Users\username\Documents\sheet_exported.csv", FileFormat:=xlCSV
    ActiveWorkbook.Close SaveChanges:=False
    
    MsgBox "指定したシートのデータがCSVファイルとして書き出されました。"
End Sub

ポイント:

  • やっていることは、シートそのまま 名前を付けて保存→CSVで処理しているのと同じ。
  • Set ws = ThisWorkbook.Sheets("Sheet1")、Sheet1のところでシート名を指定します。
  • ws.Copy でシートを新しいブックにコピーし、ActiveWorkbook.SaveAs でその新しいブックをCSV形式で保存しています。
  • 処理が終わった後は ActiveWorkbook.Close で一時的に作成したブックを閉じます。

カスタム形式でCSVを出力する

次に、VBAでカスタムフォーマットのCSVファイルを出力する方法を紹介します。Excelのシートデータを細かく制御しながら、カンマ区切り形式でテキストファイルとして書き出す例です。

カスタム形式でCSVファイルに書き出す

Sub ExportCustomCSV()
    Dim ws As Worksheet
    Dim fileName As String
    Dim cellValue As String
    Dim fileNum As Integer
    Dim rowNum As Long
    Dim colNum As Long
    Dim lastRow As Long
    Dim lastCol As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    fileName = "C:\Users\username\Documents\custom_export.csv"
    
    ' ファイル番号の取得
    fileNum = FreeFile
    
    ' CSVファイルのオープン
    Open fileName For Output As fileNum
    
    ' 最終行と最終列を取得
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    
    ' シートのデータをカスタムでCSV形式に書き出し
    For rowNum = 1 To lastRow
        cellValue = ""
        For colNum = 1 To lastCol
            cellValue = cellValue & ws.Cells(rowNum, colNum).Value
            If colNum < lastCol Then
                cellValue = cellValue & ","  ' カンマを追加
            End If
        Next colNum
        Print #fileNum, cellValue
    Next rowNum
    
    ' ファイルを閉じる
    Close fileNum
    
    MsgBox "カスタム形式でCSVファイルが書き出されました。"
End Sub

コードの解説:

  • Open fileName For Output As fileNum でCSVファイルを作成・オープンしています。
  • Forループ を使ってシート内のデータを行ごとにカンマ区切りで書き出しています。
  • Print #fileNum, cellValue で各行をCSV形式でファイルに保存しています。

特定の条件を満たすデータのみをCSVに書き出す

業務では、すべてのデータを保存するのではなく、特定の条件を満たすデータのみをCSVファイルに書き出すことも必要になる場合があります。次のマクロでは、特定の条件を満たす行だけをCSVとして保存します。

条件を満たすデータをCSVファイルに書き出す

Sub ExportFilteredCSV()
    Dim ws As Worksheet
    Dim fileName As String
    Dim cellValue As String
    Dim fileNum As Integer
    Dim rowNum As Long
    Dim colNum As Long
    Dim lastRow As Long
    Dim lastCol As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    fileName = "C:\Users\username\Documents\filtered_export.csv"
    
    ' ファイル番号の取得
    fileNum = FreeFile
    
    ' CSVファイルのオープン
    Open fileName For Output As fileNum
    
    ' 最終行と最終列を取得
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    
    ' 条件に基づいてデータを書き出す
    For rowNum = 1 To lastRow
        If ws.Cells(rowNum, 2).Value > 100 Then ' 例: B列の値が100より大きい行のみを出力
            cellValue = ""
            For colNum = 1 To lastCol
                cellValue = cellValue & ws.Cells(rowNum, colNum).Value
                If colNum < lastCol Then
                    cellValue = cellValue & ","
                End If
            Next colNum
            Print #fileNum, cellValue
        End If
    Next rowNum
    
    ' ファイルを閉じる
    Close fileNum
    
    MsgBox "条件を満たすデータがCSVファイルに書き出されました。"
End Sub

コードの解説:

  • If ws.Cells(rowNum, 2).Value > 100 という条件で、B列の値が100より大きい行のみをCSVに保存しています。
  • 他の処理は前の例と同様、行ごとにカンマ区切りでCSVファイルに書き出します。

まとめ

Excel VBAを使って CSVファイルを保存することで、業務でのデータ管理や他システムとのデータ連携を効率的に行うことができます。特定のシートや範囲選択、さらに、条件に基づいてデータをフィルタリングして保存することで、柔軟かつ効率的なデータ処理が可能です。

コメント

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