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


コメント