エクセルVBAマクロでxmlファイルを読み込む

テーマはExcelのマクロのついての備忘的なメモ Excelの話

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の機能での返金申請で購入をキャンセルください。 そ...

コメント

タイトルとURLをコピーしました