PR

Excel VBAの出力形式|CSV・XML・JSON・Excelの違いと選び方

Excel VBAの出力形式 データサイエンティスト検定
スポンサーリンク

はじめに

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は項目の構造を組み立てる別の処理が必要です。形式名だけで判断せず、列順・データ型・文字コード・スキーマを確認してから出力方法を選びましょう。

関連記事


タイトルとURLをコピーしました