システム間のデータ連携や設定ファイルの形式として多く利用されているXMLファイル。
ExcelでこのXMLデータを読み取り、シート上に展開・一覧化したいというケースも少なくありません。
本記事では、VBAのDOMパーサー(MSXML2.DOMDocument
)を使って、XML形式のデータをノード単位で読み取り、Excel上に出力する方法をご紹介いたします。
目次
想定されるXML構造
例:user_data.xml
<users>
<user id="001">
<name>田中太郎</name>
<email>tanaka@example.com</email>
</user>
<user id="002">
<name>山田花子</name>
<email>hanako@example.com</email>
</user>
</users>
このような構造から、ID、名前、メールアドレスをそれぞれ抽出してExcelに貼り付けます。
VBAコード:XMLを読み込みExcelに出力する
Sub ReadXMLToExcel()
Dim xmlDoc As Object
Dim itemNode As Object, userList As Object
Dim rowIndex As Long
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
xmlDoc.async = False
xmlDoc.Load ThisWorkbook.Path & "\user_data.xml"
Set userList = xmlDoc.DocumentElement.ChildNodes
For rowIndex = 0 To userList.Length - 1
Set itemNode = userList.Item(rowIndex)
With ThisWorkbook.Worksheets(1)
.Cells(rowIndex + 2, 2).Value = itemNode.getAttribute("id")
.Cells(rowIndex + 2, 3).Value = itemNode.ChildNodes(0).Text
.Cells(rowIndex + 2, 4).Value = itemNode.ChildNodes(1).Text
End With
Next
MsgBox xmlDoc.DocumentElement.XML, vbInformation, "XML Raw Data"
End Sub
処理のポイント
処理内容 | 解説 |
---|---|
CreateObject("MSXML2.DOMDocument.6.0") | DOMベースでXML解析を行う |
Load | ローカルのXMLファイルを読み込み |
getAttribute("id") | 各ノードの属性(ID)を取得 |
ChildNodes(0).Text | <name> の中身を抽出 |
ChildNodes(1).Text | <email> の中身を抽出 |
DocumentElement.XML | XMLの全体構造を文字列として表示(確認用) |
実行結果(Excelシート)
B列(ID) | C列(名前) | D列(メールアドレス) |
---|---|---|
001 | 田中太郎 | tanaka@example.com |
002 | 山田花子 | hanako@example.com |
注意点
- XMLファイルの階層構造が異なる場合は、
ChildNodes()
の順番や階層指定を調整してください。 MSXML2.DOMDocument.6.0
は Windows 標準ライブラリですが、環境によってはMSXML2.DOMDocument.3.0
も利用可能です。- 日本語を含むXMLは、UTF-8で保存されていることが多いため、文字化け防止のためには BOM 付きの形式を使用することを推奨します。
応用ポイント
- 特定のタグだけを抽出したい場合は
SelectNodes("//タグ名")
を使う方法もあります(XPath対応)。 - 抽出データを直接他のブックへ書き込むことも可能です。
- JSON形式から変換したXMLも同じ処理で対応可能です。
まとめ
Excel VBAでは、MSXML
ライブラリを活用することで、XMLデータの構造を正確に読み取って、必要な情報だけを抽出しExcelシートへ整形表示することが可能です。
構造化データを扱う場面で非常に強力な手段ですので、業務自動化やレポート作成にぜひご活用ください。