VBAでExcelデータをCSV出力する方法!

Excel(エクセル)で管理している大量のデータを、システム連携やWebサイトへのアップロード用に「CSV形式」で出力したいことはないでしょうか?

けど、そんな中で悩むことは,

  • VBAを使ってワンクリックでCSV出力したい
  • 文字化け(Shift-JISやUTF-8)しない正しい出力方法を知りたい
  • 指定したフォルダに自動でファイル名を付けて保存したい

ですよね。

今回はそんなお悩みを解決する

    • VBAで現在のアクティブシートをCSV形式で保存する基本コード
    • 全シート一括処理の応用コードと、絶対に外せない文字化け対策

についてまとめます!

VBAでExcelデータをCSV出力する基本コード

Excelの標準機能である「SaveAs(名前を付けて保存)」をVBAから呼び出す方法が最も簡単で確実です。

手順

  1. マクロを書き込みたいExcelファイルを開き、「Alt + F11」を押してVBAエディタを開きます。

  2. 「挿入」メニューから「標準モジュール」を追加し、下記のコードを貼り付けます。

  3. マクロを実行すると、開いているシートのデータが実行エクセルと同じフォルダに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が問題なく出力できましたね!

タカヒロ
タカヒロ
ThisWorkbook.Pathを使うことで、マクロ入りのエクセルがどこに移動しても、その移動先と同じフォルダの中に自動で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
POINT
  • SaveAsのFileFormatに「xlCSV」を指定して一瞬で出力
  • ThisWorkbook.Pathの活用でフォルダパスを自動取得
  • For Eachループを使えば全シートを一括でCSV化可能
  • Windows環境やExcelで開くならShift-JIS(xlCSV)
  • 最新のクラウドツールに連携するならUTF-8(xlCSVUTF8)

さいごに

いかがでしょうか。

今回は、

  • VBAで現在のアクティブシートをCSV形式で保存する基本コード
  • 全シート一括処理の応用コードと、絶対に外せない文字化け対策

についてまとめました。

手動で何枚ものシートをCSV保存するのは時間がかかりますが、VBAを一度組んでしまえばボタンひとつで一瞬で書き出しが完了します。

文字コードの使い分けさえ押さえておけば、システム連携のトラブルも未然に防げます。

データの形式や出力先の仕様に合わせて、最適な方法を試してみてください!



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA ImageChange Image