Excelでxmlファイルを読み込んで、Excelでデータを加工したいと思い、vbaでxmlを読み取る方法を試してみた備忘です。
バインディング~ファイル読み込み
事前バインディング(参照設定する)
VBAのコードの画面で「ツール」⇒「参照設定」から
「Microsoft XML v6.0」にチェックをつける。
この設定をしたうえで、コードでは以下の通りオブジェクトを生成する。
'事前バインディング
Dim XMLDocument As MSXML2.DOMDocument60
Set XMLDocument = New MSXML2.DOMDocument60
遅延バインディング(参照設定しない)
事前の参照設定せずに、遅延バインディングで実行する場合は、CreateObjectで”MSXML2.DOMDocument”で指定する。
'遅延バインディング
Dim XMLDocument As Object
Set XMLDocument = CreateObject("MSXML2.DOMDocument")

Excelのマクロでxmlファイルを読み取る|ふーた
エクセルのマクロでxmlファイルを読取り、その内容をエクセルのワークシートに書き出すvbaを作りました。 誰に需要があるかは分かりませんが、公開しておきます。 注)有料記事となっております。目的と違った、思ったようように動かないという場合には、24時間以内にnoteの機能での返金申請で購入をキャンセルください。 そ...
ファイルの読み込み
VBAは非同期処理に対応していないので、async = Falseにしてからファイルを読み込む。
XMLDocument.async = False
XMLDocument.Load (xmlfile_path)
nodeの要素
子ノード一式を取得
「.ChildNodes」で子ノードが一式で取得でき、for each で回せる。
子ノードの数は.Length で調べられる。子ノードなければ0が返ってくる。
set child_nodes = XMLDocument.ChildNodes
for each childnode in child_nodes
'処理
next
Debug.Print XMLDocument.ChildNodes.Length
nodeのタイプ
nodeのタイプは「type(node)」で把握が可能。
for each childnode in child_nodes
Debug.Print TypeName(childnode)
next
>>>
IXMLDOMProcessingInstruction:xml全体
IXMLDOMElement:タグ部分
IXMLDOMText:テキスト部分
名前とテキスト
nodeの名前はnodeName、テキストはtextで取得できる。
textでは、直下のテキストだけでなく、配下のタグのすべてのテキストがすべて抽出される。
for each childnode in child_nodes
Debug.Print childnode.nodeName
Debug.Print childnode.text
next
属性を指定して値を取得
Debug.Print node.getAttribute("zokuseiname")
属性一式
「.Attributes」で属性が一式で取得でき、for each で回せる。
個々の属性は、名前はname、値はvalueでそれぞれ取得できる
属性数は.Length で調べられる。タグに属性がなければ0が返ってくる。
Set atts = node.Attributes
for att in atts
Debug.Print att.name
Debug.Print att.Value
next
Debug.Print node.Attributes.Length

Excelのマクロでxmlファイルを読み取る|ふーた
エクセルのマクロでxmlファイルを読取り、その内容をエクセルのワークシートに書き出すvbaを作りました。 誰に需要があるかは分かりませんが、公開しておきます。 注)有料記事となっております。目的と違った、思ったようように動かないという場合には、24時間以内にnoteの機能での返金申請で購入をキャンセルください。 そ...
コメント