VBAを使って外部システムと連携するためのデータを作成する際など、XMLファイルをゼロから生成したい場合があります。整形式のXMLドキュメントを作成する上での第一歩は、ファイルの先頭に「XML宣言」を記述することです。
この記事では、VBAでMSXML2.DOMDocumentオブジェクトを利用して、XML宣言(<?xml ... ?>)だけを含む、空のXMLファイルを作成する基本的な方法を解説します。
MSXML2.DOMDocumentオブジェクトとは?
MSXML2.DOMDocumentは、VBAなどのプログラムからXMLデータを構造的に(ツリーのように)扱えるようにするための、Microsoftが提供するコンポーネントです。これを使うことで、XMLの読み込み、要素の追加・編集・削除、そしてファイルの保存といった操作が可能になります。
より安定した動作のため、バージョンを指定したMSXML2.DOMDocument.6.0を利用することが推奨されています。
完成したVBAコード
以下が、XML宣言を持つファイルを作成するVBAコードです。
Sub CreateXmlFileWithDeclaration()
' 変数を宣言します
Dim xmlDoc As Object
Dim xmlDeclarationNode As Object
Dim outputXmlPath As String
' 保存するXMLファイルのパスを指定します
outputXmlPath = ThisWorkbook.Path & "\NewXMLFile.xml"
' XMLドキュメントオブジェクトを生成します
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
' WithブロックでxmlDocオブジェクトを扱います
With xmlDoc
' 1. XML宣言ノードを作成します
' CreateProcessingInstruction("ターゲット", "内容")
Set xmlDeclarationNode = .CreateProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
' 2. 作成したノードをドキュメントに追加します
.AppendChild xmlDeclarationNode
' 3. ファイルとして保存します
.Save outputXmlPath
End With
' オブジェクトを解放します
Set xmlDeclarationNode = Nothing
Set xmlDoc = Nothing
MsgBox "XMLファイルの作成が完了しました。"
End Sub
コードのポイント解説
① XMLドキュメントオブジェクトの生成
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
CreateObject関数を使い、XMLを操作するための大元となるドキュメントオブジェクトを生成し、xmlDoc変数に格納します。
② XML宣言ノードの作成 (.CreateProcessingInstruction)
Set xmlDeclarationNode = .CreateProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
これがXML宣言を作成する中心部分です。 XMLの仕様上、<?xml ... ?>という記述は**「処理命令(Processing Instruction)」**という特殊なノードに分類されます。そのため、.CreateProcessingInstructionというメソッドを使用します。
- 第一引数
"xml": 処理命令のターゲット(対象)を指定します。XML宣言の場合は必ず"xml"になります。 - 第二引数
"version...": 処理命令の内容を文字列で指定します。VBAの文字列内でダブルクォーテーション"を表現するには、""のように2つ続けます。
③ ノードの追加と保存 (.AppendChild, .Save)
.AppendChild xmlDeclarationNode
.Save outputXmlPath
.CreateProcessingInstructionで作成されたノードは、まだメモリ上に存在するだけです。これを.AppendChildメソッドを使ってxmlDocオブジェクトの最初の子要素として追加します。
最後に、.Saveメソッドで、メモリ上にあるxmlDocオブジェクトの現在の状態を指定したパスのファイルに丸ごと書き出します。
生成されるXMLファイル
上記のVBAコードを実行すると、Excelファイルと同じフォルダにNewXMLFile.xmlというファイルが作成されます。このファイルをテキストエディタで開くと、以下の内容が書き込まれています。
<?xml version="1.0" encoding="UTF-8"?>
まとめ
VBAでXMLファイルを生成する際の基礎は、MSXML2.DOMDocumentオブジェクトの操作です。
その第一歩として、.CreateProcessingInstructionメソッドでXML宣言を作成し、.AppendChildでドキュメントに追加する、という流れを理解することが重要です。ここからさらに要素ノードを追加していくことで、複雑なXML構造もプログラムで組み立てることが可能になります。
