Excelでのデータ管理や集計作業において、特定の範囲だけをCSVファイルとして保存したい場面は少なくありません。しかし、毎回手作業で範囲を選択し、新しいブックにコピーしてCSV形式で保存するのは手間がかかります。
この記事では、Excel VBAマクロを使って、指定したセル範囲のデータをボタン一つでCSVファイルとして書き出す方法を、初心者の方にも分かりやすく解説します。
サンプルコードを交えながら丁寧に説明しますので、ぜひご自身の業務効率化にお役立てください。
完成したVBAコード
まずは、今回作成するVBAコードの全体像です。このコードを標準モジュールにコピー&ペーストするだけで、すぐに利用できます。
Sub ExportRangeToCsv()
' 変数を宣言します
Dim targetRange As Range
Dim newWb As Workbook
' --- 設定箇所 ここから ---
' CSVに出力したいセル範囲を指定します
' この例では、アクティブなシートのB2からH12の範囲を指定しています
Set targetRange = ThisWorkbook.ActiveSheet.Range("B2:H12")
' --- 設定箇所 ここまで ---
' 新しいワークブックを追加します
Set newWb = Workbooks.Add
' 指定した範囲を、新しいワークブックの最初のシートのA1セルにコピーします
targetRange.Copy newWb.Worksheets(1).Range("A1")
' 新しいワークブックをCSV形式で保存します
' ファイル名は「ExportData.csv」とし、マクロを実行したExcelファイルと同じ場所に保存されます
newWb.SaveAs ThisWorkbook.Path & "\ExportData.csv", FileFormat:=xlCSV
' 保存した新しいワークブックを、変更を保存せずに閉じます
newWb.Close SaveChanges:=False
' 完了メッセージを表示します
MsgBox "指定範囲のCSV書き出しが完了しました。"
End Sub
VBAコードの詳しい解説
次に、上記のコードがどのような処理を行っているのかを一つずつ見ていきましょう。
1. 変数の宣言
' 変数を宣言します
Dim targetRange As Range
Dim newWb As Workbook
はじめに、VBAで使用する「変数」を宣言しています。変数とは、データを入れておくための箱のようなものです。
- targetRange: CSVに出力したいセル範囲の情報を格納します。
Range
オブジェクト型で宣言します。 - newWb: CSVとして保存するための一時的なワークブックの情報を格納します。
Workbook
オブジェクト型で宣言します。
2. 出力範囲の指定
' CSVに出力したいセル範囲を指定します
' この例では、アクティブなシートのB2からH12の範囲を指定しています
Set targetRange = ThisWorkbook.ActiveSheet.Range("B2:H12")
ここで、CSVファイルとして書き出したいデータの範囲を具体的に指定します。 ThisWorkbook.ActiveSheet.Range("B2:H12")
の部分は、**「このマクロが書かれているExcelファイル(ThisWorkbook
)の、現在開いているシート(ActiveSheet
)の、セルB2からH12の範囲」**という意味になります。
ご自身のデータに合わせて、"B2:H12"
の部分を自由に変更してください。
3. 新しいワークブックの準備とデータコピー
' 新しいワークブックを追加します
Set newWb = Workbooks.Add
' 指定した範囲を、新しいワークブックの最初のシートのA1セルにコピーします
targetRange.Copy newWb.Worksheets(1).Range("A1")
指定した範囲のデータだけをCSVにするため、まずWorkbooks.Add
でまっさらな新しいワークブックを作成します。 その後、targetRange.Copy
を使って、先ほど指定したセル範囲のデータを、新しいワークブックの1枚目のシート(newWb.Worksheets(1)
)のA1セルを起点として貼り付けます。
4. CSV形式で保存
' 新しいワークブックをCSV形式で保存します
' ファイル名は「ExportData.csv」とし、マクロを実行したExcelファイルと同じ場所に保存されます
newWb.SaveAs ThisWorkbook.Path & "\ExportData.csv", FileFormat:=xlCSV
ここが処理の核となる部分です。 newWb.SaveAs
メソッドを使い、データをコピーした新しいワークブックを保存します。
ThisWorkbook.Path & "\ExportData.csv"
:ThisWorkbook.Path
は、マクロを実行しているExcelファイルが保存されているフォルダの場所(パス)を取得します。& "\ExportData.csv"
で、その場所に「ExportData.csv」というファイル名で保存するように指定しています。ファイル名は自由に変更可能です。
FileFormat:=xlCSV
:- 保存するファイルの形式を指定する重要な引数です。
xlCSV
と指定することで、CSV形式で保存されます。
- 保存するファイルの形式を指定する重要な引数です。
5. 後処理
' 保存した新しいワークブックを、変更を保存せずに閉じます
newWb.Close SaveChanges:=False
' 完了メッセージを表示します
MsgBox "指定範囲のCSV書き出しが完了しました。"
CSVファイルの保存が完了したため、作業用に作成した新しいワークブック(newWb
)はもう不要です。newWb.Close
でこのワークブックを閉じます。その際、SaveChanges:=False
とすることで、保存に関する確認メッセージを表示させずに閉じることができます。
最後にMsgBox
で処理が完了したことをユーザーに知らせます。
まとめ
今回は、Excel VBAを使用して特定のセル範囲をCSVファイルとして書き出す方法について解説しました。
このマクロを活用することで、
- 手作業によるコピー&ペーストの手間が省ける
- 毎回同じ範囲・同じファイル名で出力でき、作業ミスを防げる
- ボタン一つで処理が完了し、大幅な時間短縮につながる
といったメリットがあります。
ぜひ、ご自身のExcelファイルにこのマクロを導入して、日々の業務を効率化してみてください。