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データを解析し、シートに展開して業務に活用する処理 を簡単に作成できます。
