【Excel VBA】DOMDocument60を使ったXMLファイルの作成と出力方法

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

Excel VBAを使用して、配列データを元にDOMDocument60(MSXML2.DOMDocument60)を操作し、XMLファイルを生成してデスクトップに出力する手順とサンプルコードを解説します。

この記事でできること

VBAからXMLのDOMを操作し、属性付きの要素や子要素(名前、住所、電話番号など)を持つXMLファイルを指定パスへ保存できます。

前提条件・環境

Windows環境のExcel(Microsoft 365, Excel 2016/2019/2021等)で動作します。参照設定を行わずにLate Bindingで記述することも可能ですが、本記事ではコード補完が効くEarly Bindingベースの`MSXML2.DOMDocument60`を使用します。

サンプルコード

Public Sub sample()
    Dim strArray() As Variant
    Dim XMLDocument As MSXML2.DOMDocument60
    Dim xmlRoot As IXMLDOMNode
    Dim xmlData As IXMLDOMNode
    Dim xmlChildData As IXMLDOMNode
    Dim xmlAttr As MSXML2.IXMLDOMAttribute

    ' 出力するデータを設定(名前、住所、電話番号)
    strArray = Array(Array("てすと太郎", "東京都港区XX-XX-XX", "111-1111-1111"), _
                     Array("てすと次郎", "埼玉県さいたま市XX-XX-XX", "222-2222-2222"), _
                     Array("てすと三郎", "神奈川県横浜市XX-XX-XX", "333-3333-3333"))

    On Error GoTo ERROR_

    ' MSXMLオブジェクトを生成
    Set XMLDocument = New MSXML2.DOMDocument60

    ' XML宣言を生成(Shift_JIS)
    Call XMLDocument.appendChild(XMLDocument.createProcessingInstruction("xml", "version=""1.0"" encoding=""Shift_JIS"""))

    ' ルート要素を生成
    Set xmlRoot = XMLDocument.appendChild(XMLDocument.createElement("ROOT"))

    ' 配列データの数だけ子要素を追加
    Dim intId As Integer
    For intId = 0 To UBound(strArray)
        Set xmlData = XMLDocument.createElement("DATA")
        Set xmlAttr = XMLDocument.createAttribute("id")
        xmlAttr.NodeValue = intId + 1
        Call xmlData.Attributes.setNamedItem(xmlAttr)

        Set xmlChildData = xmlData.appendChild(XMLDocument.createElement("Name"))
        xmlChildData.Text = strArray(intId)(0)
        Set xmlChildData = xmlData.appendChild(XMLDocument.createElement("Address"))
        xmlChildData.Text = strArray(intId)(1)
        Set xmlChildData = xmlData.appendChild(XMLDocument.createElement("Tel"))
        xmlChildData.Text = strArray(intId)(2)

        Call xmlRoot.appendChild(xmlData)
    Next intId

    ' XMLドキュメントを指定パスに出力
    XMLDocument.Save ("C:\Users\Public\Desktop\sample.xml")
    
    MsgBox "XMLファイルの出力が完了しました。", vbInformation
        
FINALLY:
    ' 各オブジェクトの解放
    If Not XMLDocument Is Nothing Then Set XMLDocument = Nothing
    If Not xmlRoot Is Nothing Then Set xmlRoot = Nothing
    If Not xmlData Is Nothing Then Set xmlData = Nothing
    If Not xmlChildData Is Nothing Then Set xmlChildData = Nothing
    If Not xmlAttr Is Nothing Then Set xmlAttr = Nothing
    Exit Sub

ERROR_:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
    GoTo FINALLY
End Sub

実行手順とポイント

1. ExcelのVBE(Visual Basic Editor)を開き、標準モジュールに上記のコードを貼り付けます。
2. ツール > 参照設定 から `Microsoft XML, v6.0` にチェックが入っていることを確認します。
3. `sample` マクロを実行すると、`C:\Users\Public\Desktop\sample.xml` が出力されます(保存先の権限に注意してください)。

トラブルシューティング

Q. `MSXML2.DOMDocument60` でコンパイルエラーになる
A. 古いOffice環境や参照設定の不備が考えられます。必要に応じて参照設定を確認してください。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 削除リンク切れしている外部参考サイトへのリンクを削除しました。
  • 追加環境構築の前提条件とXMLファイル保存時のエラー処理に関する解説を追加しました。
  • 変更DOMDocument60を利用したVBAコードの体裁を整え、エンコードや保存パスに関する注意点を明確化しました。

文書情報

記事タイトル
【Excel VBA】DOMDocument60を使ったXMLファイルの作成と出力方法
作成日
更新日
Source URL
https://papanda925.com/?p=959

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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