Excel(エクセル)で管理している大量のデータを、システム連携やWebサイトへのアップロード用に「CSV形式」で出力したいことはないでしょうか?
けど、そんな中で悩むことは,
- VBAを使ってワンクリックでCSV出力したい
- 文字化け(Shift-JISやUTF-8)しない正しい出力方法を知りたい
- 指定したフォルダに自動でファイル名を付けて保存したい
ですよね。
今回はそんなお悩みを解決する
-
- VBAで現在のアクティブシートをCSV形式で保存する基本コード
- 全シート一括処理の応用コードと、絶対に外せない文字化け対策
についてまとめます!
VBAでExcelデータをCSV出力する基本コード
Excelの標準機能である「SaveAs(名前を付けて保存)」をVBAから呼び出す方法が最も簡単で確実です。
もくじ
手順
-
マクロを書き込みたいExcelファイルを開き、「Alt + F11」を押してVBAエディタを開きます。
-
「挿入」メニューから「標準モジュール」を追加し、下記のコードを貼り付けます。
-
マクロを実行すると、開いているシートのデータが実行エクセルと同じフォルダにCSV出力されます。
構文
ActiveSheet.SaveAs Filename:="ファイルパス", FileFormat:=xlCSV
サンプルコード
Sub ExportToCSV()
Dim savePath As String
' 保存先のパスとファイル名を指定(マクロを実行したExcelと同じフォルダに保存)
savePath = ThisWorkbook.Path & "\CSV出力結果.csv"
' アクティブシートをCSV(カンマ区切り)形式で名前を付けて保存
ActiveSheet.SaveAs Filename:=savePath, FileFormat:=xlCSV, CreateBackup:=False
MsgBox "CSVファイルの出力が完了しました!", vbInformation
End Sub
フォルダーの場所(パス)は、実際の保存先に書き換えてください。
サンプルの表
こちらのサンプル表をエクセルの任意のシートにコピペします。
| 商品ID | 商品名 | カテゴリ | 単価(円) | 在庫数 | 産地 |
|---|---|---|---|---|---|
| S001 | 完熟トマト | 野菜 | 120 | 50 | 熊本県 |
| S002 | シャキシャキレタス | 野菜 | 180 | 30 | 長野県 |
| S003 | 甘いみかん(大袋) | 果物 | 580 | 15 | 愛媛県 |
| S004 | 青森県産サンふじ | 果物 | 200 | 40 | 青森県 |
| S005 | 新じゃがいも | 野菜 | 90 | 100 | 北海道 |
実行結果
はい、CSVが問題なく出力できましたね!
全ワークシートを個別のCSVとして一括出力する応用
実務の現場では、1枚のシートだけでなく、ブック内にあるすべてのシートを、シート名をファイル名にして一気にCSV出力したいケースが多くあります。
この場合は以下のコードを使います。
サンプルコード
Sub ExportAllSheetsToCSV()
Dim ws As Worksheet
Dim savePath As String
' 画面の更新を止めて処理を高速化
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
' シートごとに保存パスを作成
savePath = ThisWorkbook.Path & "\" & ws.Name & ".csv"
' 対象のシートを新しいブックとして独立させてCSV保存
ws.Copy
ActiveWorkbook.SaveAs Filename:=savePath, FileFormat:=xlCSV
ActiveWorkbook.Close SaveChanges:=False
Next ws
Application.ScreenUpdating = True
MsgBox "すべてのシートのCSV出力が完了しました!", vbInformation
End Sub
サンプルの表とシート
3つのシートを用意します。

実行結果
はい、複数のシートがそれぞれCSVファイルとして出力されましたね!

CSV出力で絶対に知っておくべき「文字化け」対策
VBAでCSVを出力する際、避けて通れないのが「文字化け」のトラブルです。
出力したCSVをどのシステムで読み込むかによって、適切な文字コードを使い分ける必要があります。
Windows環境やExcelなら「Shift-JIS」
上記のコードで使っている `FileFormat:=xlCSV` を指定して出力すると、自動的にWindows標準の「Shift-JIS(CP932)」で保存されます。
Excelでそのままダブルクリックして開いても文字化けすることはありません。
WebシステムやMac環境なら「UTF-8」
海外製のツールやクラウドシステム(Salesforceやkintoneなど)にインポートする場合、Shift-JISだと文字化けしてしまいますので、
その場合は、文字コードを「UTF-8」に指定して出力する必要があります。
UTF-8形式で出力したい場合は、以下のように保存形式の引数を書き換えてください。
構文(UTF-8形式)
ActiveSheet.SaveAs Filename:="ファイルパス", FileFormat:=xlCSVUTF8
- SaveAsのFileFormatに「xlCSV」を指定して一瞬で出力
- ThisWorkbook.Pathの活用でフォルダパスを自動取得
- For Eachループを使えば全シートを一括でCSV化可能
- Windows環境やExcelで開くならShift-JIS(xlCSV)
- 最新のクラウドツールに連携するならUTF-8(xlCSVUTF8)
さいごに
いかがでしょうか。
今回は、
- VBAで現在のアクティブシートをCSV形式で保存する基本コード
- 全シート一括処理の応用コードと、絶対に外せない文字化け対策
についてまとめました。
手動で何枚ものシートをCSV保存するのは時間がかかりますが、VBAを一度組んでしまえばボタンひとつで一瞬で書き出しが完了します。
文字コードの使い分けさえ押さえておけば、システム連携のトラブルも未然に防げます。
データの形式や出力先の仕様に合わせて、最適な方法を試してみてください!












コメントを残す