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コードの体裁を整え、エンコードや保存パスに関する注意点を明確化しました。

