Excel VBA 逆引き集 | XML読み込み

Excel VBA
スポンサーリンク

XML読み込みの基本

業務で「外部システムからXML形式でデータを受け取る」「設定ファイルをXMLで管理する」といった場面はよくあります。
Excel VBAでは MSXMLライブラリ を使うことで、XMLを簡単に読み込んで解析できます。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • XMLとは?
    Extensible Markup Language の略で、データをタグで囲んで階層構造で表現する形式。
    例:
<users>
  <user>
    <name>山田太郎</name>
    <age>30</age>
  </user>
  <user>
    <name>鈴木花子</name>
    <age>25</age>
  </user>
</users>
XML
  • Excel VBAでXMLを扱う方法:
    • MSXML2.DOMDocument を利用してXMLを読み込む。
    • ノードを検索して値を取り出す。

テンプレ1:XMLファイルを読み込んで値を取得

Sub ReadXML_Basic()
    Dim xmlDoc As Object
    Dim root As Object
    
    ' MSXMLオブジェクトを作成
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.async = False
    xmlDoc.Load "C:\temp\data.xml"
    
    ' ルート要素を取得
    Set root = xmlDoc.DocumentElement
    
    ' 最初のユーザーの名前と年齢を表示
    MsgBox "名前: " & root.SelectSingleNode("user/name").Text
    MsgBox "年齢: " & root.SelectSingleNode("user/age").Text
End Sub
VB
  • ポイント:
    • Load でXMLファイルを読み込む。
    • SelectSingleNode("パス") で特定ノードを取得。

テンプレ2:複数ノードをループ処理

Sub ReadXML_Loop()
    Dim xmlDoc As Object
    Dim users As Object, user As Object
    
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.async = False
    xmlDoc.Load "C:\temp\data.xml"
    
    Set users = xmlDoc.SelectNodes("//user")
    
    Dim i As Long
    For i = 0 To users.Length - 1
        Set user = users.Item(i)
        MsgBox "名前: " & user.SelectSingleNode("name").Text & _
               " 年齢: " & user.SelectSingleNode("age").Text
    Next i
End Sub
VB
  • ポイント:
    • SelectNodes("//user") で複数ノードを取得。
    • ループで1件ずつ処理。

テンプレ3:XMLデータをシートに展開

Sub ReadXML_ToSheet()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim xmlDoc As Object, users As Object, user As Object
    
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.async = False
    xmlDoc.Load "C:\temp\data.xml"
    
    Set users = xmlDoc.SelectNodes("//user")
    
    ws.Cells.Clear
    ws.Range("A1").Value = "名前"
    ws.Range("B1").Value = "年齢"
    
    Dim i As Long
    For i = 0 To users.Length - 1
        Set user = users.Item(i)
        ws.Cells(i + 2, 1).Value = user.SelectSingleNode("name").Text
        ws.Cells(i + 2, 2).Value = user.SelectSingleNode("age").Text
    Next i
    
    MsgBox "XMLデータをシートに展開しました!"
End Sub
VB
  • ポイント:
    • XMLの内容をExcel表に変換。
    • 実務で「データ取り込み」によく使う。

テンプレ4:属性値を取得する

XML例:

<products>
  <product id="101" name="ノートPC" price="120000"/>
  <product id="102" name="マウス" price="2000"/>
</products>
XML

コード例:

Sub ReadXML_Attributes()
    Dim xmlDoc As Object, products As Object, product As Object
    
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.async = False
    xmlDoc.Load "C:\temp\products.xml"
    
    Set products = xmlDoc.SelectNodes("//product")
    
    Dim i As Long
    For i = 0 To products.Length - 1
        Set product = products.Item(i)
        MsgBox "ID: " & product.getAttribute("id") & _
               " 商品名: " & product.getAttribute("name") & _
               " 価格: " & product.getAttribute("price")
    Next i
End Sub
VB
  • ポイント:
    • getAttribute("属性名") で属性値を取得。
    • 商品マスタなどに便利。

例題で練習

'例1:XMLファイルを読み込んで最初のノードを表示
'例2:複数ノードをループ処理
'例3:XMLデータをシートに展開
'例4:属性値を取得
VB

初心者向けポイント

  • MSXML2.DOMDocumentを使う → VBAでXMLを扱う基本。
  • SelectSingleNode / SelectNodesで検索 → XPathで柔軟に指定可能。
  • 属性値はgetAttributeで取得 → タグ内の情報を取り出せる。
  • シート展開が実務で最も便利 → XMLをExcel表に変換して分析できる。

👉 この「XML読み込みテンプレ」を覚えておけば、Excel VBAで 外部システムからのXMLデータを解析し、シートに展開して業務に活用する処理 を簡単に作成できます。

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