【Excel VBA】XMLの要素に属性(Attribute)を追加する方法

VBAでXMLを生成する際、<item>商品A</item>のような単純な要素だけでなく、<item id="A-001">商品A</item>のように、要素の開始タグ内に属性を追加して、IDや分類などのメタデータを格納したい場合があります。

この記事では、VBAでXML要素を作成し、その要素に対して.setAttributeメソッドを使い属性を追加する方法を、基本から解説します。


目次

完成したVBAコード

以下が、<data-record record_id="rec-005" /> という、属性を持つ空のXML要素を作成し、ファイルに保存するVBAコードです。

Sub CreateXmlElementWithAttribute()

    ' 変数を宣言します
    Dim xmlDoc As Object
    Dim dataElement As Object
    Dim outputXmlPath As String
    
    ' 保存するXMLファイルのパスを指定します
    outputXmlPath = ThisWorkbook.Path & "\AttributeData.xml"

    ' XMLドキュメントオブジェクトを生成します
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    
    With xmlDoc
        ' XML宣言を作成して追加します (整形式のXMLにするため)
        .AppendChild .CreateProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
        
        ' 1. 要素ノードを作成します (例: <data-record>)
        Set dataElement = .CreateElement("data-record")
        
        ' 2. 作成した要素に属性を追加します
        dataElement.setAttribute "record_id", "rec-005"
        
        ' 3. 属性が追加された要素をドキュメントに追加します
        .AppendChild dataElement
        
        ' 4. ファイルとして保存します
        .Save outputXmlPath
    End With
    
    ' オブジェクトを解放します
    Set dataElement = Nothing
    Set xmlDoc = Nothing

    MsgBox "属性を持つXMLファイルの作成が完了しました。"

End Sub

コードのポイント解説

① 要素ノードの作成

Set dataElement = .CreateElement("data-record")

はじめに、.CreateElementメソッドを使って、XMLの土台となる要素(<data-record>)をオブジェクトとして生成します。

② 属性の追加 (.setAttribute)

dataElement.setAttribute "record_id", "rec-005"

これが属性を追加する中心的な処理です。 要素オブジェクト.setAttribute "属性名", "属性値" のように記述します。

重要なのは、.setAttributeドキュメントオブジェクト(xmlDoc)ではなく、要素オブジェクト(dataElement)のメソッドであるという点です。これにより、「どの要素に」属性を追加するのかが明確になります。

この一行で、<data-record><data-record record_id="rec-005">という情報を持つようになります。

③ ドキュメントへの追加と保存

.AppendChild dataElement
.Save outputXmlPath

最後に、属性が設定された要素オブジェクト(dataElement)をドキュメント全体に追加し、.Saveメソッドでファイルに書き出します。


属性を持つ要素にテキストも追加する場合

属性だけでなく、要素内にテキスト情報も持たせたい(例:<data-record record_id="rec-005">サンプル値</data-record>)場合は、以下のようにテキストノードを作成して追加する処理を挟みます。

' 1. 要素ノードを作成
Set dataElement = .CreateElement("data-record")
    
' 2. 要素に属性を追加
dataElement.setAttribute "record_id", "rec-005"

' 3. テキストノードを作成
Dim textNode As Object
Set textNode = .CreateTextNode("サンプル値")

' 4. テキストノードを要素の子として追加
dataElement.AppendChild textNode
    
' 5. 完成した要素をドキュメントに追加
.AppendChild dataElement

要素を作成した後、ドキュメントに追加する前に、属性の追加やテキストノードの追加といった、要素に対する加工をすべて済ませておくのがポイントです。


まとめ

XML要素に属性を追加するには、.CreateElementで作成した要素オブジェクトに対して、.setAttributeメソッドを使用します。

  • 要素の箱を作る: .CreateElement
  • 箱に名札(属性)を貼る: .setAttribute
  • 箱に中身(テキスト)を入れる: .CreateTextNode.AppendChild
  • 完成した箱を文書に配置する: .AppendChild

この流れを理解することで、より複雑で情報量の多いXMLも自由に組み立てられるようになります。

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

この記事を書いた人

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

目次