Excel VBAでXMLファイルを読み込む方法 ~DOMオブジェクトでノードを抽出してシートに展開~

システム間のデータ連携や設定ファイルの形式として多く利用されている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.XMLXMLの全体構造を文字列として表示(確認用)

実行結果(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シートへ整形表示することが可能です。
構造化データを扱う場面で非常に強力な手段ですので、業務自動化やレポート作成にぜひご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次