はじめに
Excelの表をVBAで他のシステムに渡すとき、「CSVで保存すればよいのか」「JSONやXMLに変換する必要があるのか」で迷うことがあります。拡張子だけを変えても、データの構造は変わりません。
表のデータを渡すだけならCSV、Excelでの再編集が必要ならExcel形式、受け渡し先が階層構造や項目名を求めるならJSON・XMLというように、受け手の仕様で選ぶのが基本です。この記事では4形式の違いと、VBAで出力するときに必要な処理を整理します。
この記事で分かること
- CSV・XML・JSON・Excel形式の特徴と選び方
- Excel VBAの標準的な保存処理で対応できる範囲
- 文字コード、データ型、上書きで気を付ける点
CSV・XML・JSON・Excel形式の違い
| 形式 | データの持ち方 | 主な利用場面 | VBAでの出力の考え方 |
|---|---|---|---|
| CSV | 行と列を区切り文字で表すテキスト | 一覧データの受け渡し、取り込み | Workbook.SaveAsでCSV形式を指定する |
| XML | タグによる階層構造 | 項目名や階層が指定されたシステム連携 | XMLの要素を組み立て、XML文書として保存する |
| JSON | オブジェクトと配列による階層構造 | Web APIなどとのデータ交換 | 受け手のスキーマに合わせてJSONを生成する |
| Excel | シートやセル、書式などを保持 | Excelでの確認・編集・再利用 | Workbook.SaveAsでExcelブックとして保存する |
CSVは表形式のデータ交換に向きますが、セルの色、数式や複数シートの情報はそのまま受け渡せません。Excel形式はそれらを維持できますが、相手がCSVやJSONを要求する場合は代わりになりません。
XMLとJSONは、受け手が決めた項目名、入れ子構造、値の型を満たす必要があります。どちらも「Excelの保存形式を切り替えるだけで、表が任意のシステム仕様に変換される」わけではありません。
出力形式をどう選ぶ?
表データの取り込みが目的ならCSVを第一候補にします。取り込み先が要求する区切り文字、列順、見出し行の有無、文字コードを先に確認しましょう。先頭のゼロを持つ商品コードなどは、Excel側の数値・表示形式と受け取り側の扱いにも注意が必要です。
相手がExcelで編集するならExcel形式が適しています。シート構造を維持したい場合は .xlsx を選びます。ただし .xlsx はVBAマクロを保存する形式ではないため、マクロも引き渡す場合は形式を別途検討します。
APIなどの取り決めがあるなら指定されたJSONまたはXMLを使用します。JSONではオブジェクトのキーと配列の形、XMLでは要素名や階層を合わせる必要があります。「XMLとJSONのどちらが優秀か」ではなく、接続先の仕様が判断基準です。
VBAでCSVやExcel形式に出力する基本例
次は、保存済みのマクロ有効ブックにある「データ」シートを、別ファイルのUTF-8 CSVとして出力する例です。元のブックを SaveAs で別形式に変えるのではなく、シートを新しいブックへコピーして保存するため、元のブックを別形式に保存し直さずに出力できます。
Sub ExportCsvUtf8()
Dim outputBook As Workbook
Dim outputPath As String
Dim errorMessage As String
If Len(ThisWorkbook.Path) = 0 Then
MsgBox "先に元のブックを保存してください。"
Exit Sub
End If
outputPath = ThisWorkbook.Path & Application.PathSeparator & "data.csv"
If Len(Dir(outputPath)) > 0 Then
MsgBox "同名のファイルがあります。保存先を確認してください。"
Exit Sub
End If
On Error GoTo ExportError
ThisWorkbook.Worksheets("データ").Copy
Set outputBook = ActiveWorkbook
outputBook.SaveAs Filename:=outputPath, FileFormat:=xlCSVUTF8
outputBook.Close SaveChanges:=False
Exit Sub
ExportError:
errorMessage = Err.Description
On Error Resume Next
If Not outputBook Is Nothing Then outputBook.Close SaveChanges:=False
On Error GoTo 0
MsgBox "CSV出力に失敗しました: " & errorMessage
End Sub
Excel形式で出力するときも、コピー先のブックを保存する考え方は同じです。上のコードの保存先を data.xlsx に、FileFormat:=xlOpenXMLWorkbook に変更すると、コピーしたシートを .xlsx 形式で保存できます。この例はシート1枚を対象とします。複数シートを保存したい場合は、コピーするシートの範囲を調整してください。コピーしたシートにVBAコードが付属する場合、マクロを保持できない .xlsx では保存時に警告が出ることがあります。
※このコードは動作を理解するための基本例です。Windows版ExcelのVBAと、xlCSVUTF8を利用できるExcelを想定しています。出力先の既存ファイルは上書きしません。保存時の警告、区切り文字や日付の出力表現、UTF-8のBOM(先頭の識別用バイト列)の受信側適合性は、実際のExcel環境と取り込み先で確認してください。
XML・JSONはデータ構造の生成が必要
XMLへ出力するには、例えば <records><record><name>りんご</name></record></records> のように、受け手が要求する要素構造を作ります。Windows版VBAならMSXMLのDOM機能を使い、要素を作成して文書に追加し、保存する方法があります。タグに使えない文字の処理も、文字列連結だけに頼らずXML APIへ任せるのが安全です。
JSONなら [{"name":"りんご","quantity":2}] のような配列やオブジェクトを生成します。これは完成した出力コードではなくデータ構造の例です。実際のVBAでは、JSONを構築する処理と、引用符・バックスラッシュ・改行などを正しくエスケープする処理が必要になります。数値、文字列、空値の扱いも受け手の仕様に合わせます。
XML・JSONの汎用変換処理は、この4形式の選び方を説明する記事には詰め込みません。実装する場合は接続先スキーマを確定し、各形式の専用処理として検証する必要があります。
出力前に確認したい注意点
- 元データの保護: 元ブックを直接別形式へ
SaveAsすると、作業中のファイルの保存状態や形式が変わり得ます。出力用コピーを作ると影響を切り分けられます。 - 文字コード: CSVの文字コードは読み取り側と合わせます。UTF-8指定だけで、相手の取り込み設定まで自動的に一致するわけではありません。文字コードそのものの変換は関連記事で解説しています。
- データ型: 日付、ゼロから始まるコード、桁数の大きな数値は、Excel表示と外部ファイルの表現・取り込み時の型が一致するか確かめます。
- XML・JSONの妥当性: 生成したファイルを対応するパーサーで読み込み、項目名・入れ子構造・特殊文字を確認します。
- 保存先: 既存ファイルの上書きと保存先パスを明示し、本番データの上書きを避けます。
まとめ
Excel VBAでデータを出力する形式は、受け渡し先が必要とする構造と用途で決めます。CSVは表形式の受け渡し、Excel形式はシートの再編集、JSON・XMLは取り決められたデータ構造での連携に向いています。
CSVとExcelは Workbook.SaveAs による保存形式の選択が出発点です。一方、XML・JSONは項目の構造を組み立てる別の処理が必要です。形式名だけで判断せず、列順・データ型・文字コード・スキーマを確認してから出力方法を選びましょう。