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も自由に組み立てられるようになります。