XPath式でXMLデータを抽出してExcelに表示するVBA活用法

XML形式のデータは階層構造を持つため、必要な情報をピンポイントで取り出すには、XPath(XML Path Language)による指定が非常に有効です。
Excel VBAでは、MSXML2.DOMDocument を使ってXPath式を活用することで、対象ノードを的確に取得し、Excelに書き出す処理を簡潔に実装できます。

この記事では、XPath式を用いて特定の属性や要素を持つノードを検索し、その内容をExcelに出力する方法をご紹介いたします。


目次

想定するXML構造(例:staff_list.xml

<staffs>
<staff id="A01">
<name>鈴木一郎</name>
<department>営業部</department>
</staff>
<staff id="A02">
<name>佐藤花子</name>
<department>総務部</department>
</staff>
<staff id="A03">
<name>田中健太</name>
<department>営業部</department>
</staff>
</staffs>

このXMLから、以下の情報を抽出したいとします:

  • IDが「A01」の社員の氏名(<name>タグ)
  • 所属が「営業部」のすべての社員の氏名を連結

VBAコード:XPathでノードを抽出してExcelに出力

Sub ExtractFromXMLwithXPath()
    Dim xmlDoc As Object
    Dim node As Object, nodeList As Object
    Dim resultText As String
    
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    xmlDoc.async = False
    xmlDoc.Load ThisWorkbook.Path & "\staff_list.xml"
    
    ' IDがA01の氏名を抽出
    Set node = xmlDoc.SelectSingleNode("/staffs/staff[@id='A01']/name")
    ThisWorkbook.Worksheets(1).Range("C2").Value = node.Text
    
    ' 営業部に所属する全員の氏名を抽出
    Set nodeList = xmlDoc.SelectNodes("/staffs/staff[department='営業部']/name")
    For Each node In nodeList
        resultText = resultText & node.Text & "、"
    Next
    If Len(resultText) > 0 Then resultText = Left(resultText, Len(resultText) - 1)
    
    ThisWorkbook.Worksheets(1).Range("C3").Value = resultText
End Sub

ポイント解説

項目説明
SelectSingleNode()単一ノードをXPathで検索(属性や階層指定が可能)
SelectNodes()条件に一致するノードを複数取得(ループで処理)
@id='A01'属性 id が “A01” のノードを指定
[department='営業部']子要素の値に基づく条件指定
node.Textタグ内のテキストを取得

実行結果のイメージ(Excel)

C列
C2:鈴木一郎
C3:鈴木一郎、田中健太

応用アイディア

  • SelectNodes("//staff[starts-with(department,'営')]") のようなXPath関数で曖昧検索も可能です。
  • XMLの階層が深い場合でも、XPathにより柔軟に絞り込みできます。
  • 抽出結果を他シートや別ブックへ転記する処理にも容易に組み込めます。

注意点

  • XMLファイルの文字コードがUTF-8やShift-JISで保存されている場合、環境により文字化けする可能性があるため注意が必要です。
  • XPath構文は構造に厳密なため、タグ名のスペルミスや階層誤りに注意してください。

まとめ

XPath式を使えば、XMLの複雑な構造の中から必要なデータを的確に抽出し、Excelへ簡潔に転記することができます
Excel VBAとXMLの連携を活用することで、システムデータや設定ファイルを効率よく活用できるようになります。

業務自動化やマスタ管理の効率化に、ぜひこの方法をご活用ください。

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

この記事を書いた人

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

目次