VBAでXMLファイルの全タグ名と値を出力する方法

ヘッダー広告
スポンサードリンク
EXCELやACCESSからXMLファイルの全タグ名と値を出力する方法についての記事になります。

MWSと連携する機能の開発をしているときなどに、XMLの内容を確認することが度々あります。
ブラウザから確認すれば簡単なのですが、「EXCELからもXMLの内容をすべて出力したい!」と思ったのですが、ネット上に全てのタグを出力するプログラムが見つかりませんでしたので、自分で作成しました。

※VBAでXMLの各内容を指定して出力する方法についてはこちらの記事をご参照ください。

 

VBAでXMLファイルの全タグ名と値を出力するプログラム

サンプルのXMLファイル

今回サンプルとなるXMLファイルは、前回同様にAmazonマーケットプレイスWebサービス(MWS)の出力結果を使用します。

<?xml version="1.0"?>
<ListInventorySupplyResponse xmlns="http://mws.amazonaws.com/FulfillmentInventory/2010-10-01/">
    <ListInventorySupplyResult>
        <NextToken>H4sIAAAAAAAAADXQzW6CMAAA4FcxXD3AgE5J5pLSiBTQ8Sc
            SblCB0Ap2LSL49O6y7xGr05WbPW8ip3SlDdZK6t3CmuKTH8d9B/0mhCR7gcV
            E3gpuDaR8850n239tjC17Z3Gg2PmsZJNa14izwUtQAMYp6tOH4NHl/gN492S
            YVU0P5F0OYwUwmYI0d/YHnMSgDPUF0mvxTPNofZkXr6ww39SIBYJUTlUMNwI
            WaduUNr/MZYmaySPqugvxiQaTs2Rxgs1gFENKcUV7Ry/8BSUECjcj2sQ7bLT
            nBvYPd9/ksLbmV5ydt+HUWFx1QMQgD7O5Ey96mZzNZypKo7V9nBUtPNp/Azt
            F/X4Di21K/SkBAAA=</NextToken>
        <InventorySupplyList>
            <member>
                <SellerSKU>SampleSKU3</SellerSKU>
                <ASIN>BT008FQ92Q</ASIN>
                <TotalSupplyQuantity>18</TotalSupplyQuantity>
                <FNSKU>X0000000EY</FNSKU>
                <Condition>NewItem</Condition>
                <SupplyDetail>
                    <member>
                        <EarliestAvailableToPick>
                            <TimepointType>Immediately</TimepointType>
                        </EarliestAvailableToPick>
                        <Quantity>5</Quantity>
                        <LatestAvailableToPick>
                            <TimepointType>Immediately</TimepointType>
                        </LatestAvailableToPick>
                        <SupplyType>InStock</SupplyType>
                    </member>
                    <member>
                        <EarliestAvailableToPick>
                            <TimepointType>DateTime</TimepointType>
                            <DateTime>2011-05-04T23:00:00Z</DateTime>
                        </EarliestAvailableToPick>
                        <Quantity>13</Quantity>
                        <LatestAvailableToPick>
                            <TimepointType>DateTime</TimepointType>
                            <DateTime>2011-05-04T23:00:00Z</DateTime>
                        </LatestAvailableToPick>
                        <SupplyType>InStock</SupplyType>
                    </member>
                </SupplyDetail>
                <InStockSupplyQuantity>4</InStockSupplyQuantity>
            </member>
        </InventorySupplyList>
    </ListInventorySupplyResult>
    <ResponseMetadata>
        <RequestId>e26d8d21-8e5c-11df-9acb-230ae7a8b736</RequestId>
    </ResponseMetadata>
</ListInventorySupplyResponse>

引用: AmazonマーケットプレイスWebサービス(Amazon MWS)ドキュメント Amazon MWS ドキュメント » APIリファレンス » フルフィルメント在庫 – バージョン2010-10-01 » ListInventorySupply レスポンス例

XMLを出力するVBAプログラム

上記のXMLファイルのタグ内容と値を出力するVBAプログラムは以下の通りです。

Option Explicit

Private RowData As Long
Private FieldColm As Long

Private Const FOLDER As String = "D:\XML\"
Private Const FILENAME As String = "ListInventorySupply.xml"
   
Public Sub GetAllTag()
    
    Dim FilePath As String
    Dim Xml As Object
    
    Set Xml = CreateObject("Microsoft.XMLDOM")
    Xml.async = False
    
    RowData = 0
    FieldColm = 0
   
    FilePath = FOLDER & FILENAME
   
    If Xml.Load(FilePath) Then
        Call GetChildNode(Xml, "")
    End If

    Set Xml = Nothing
    
End Sub

Public Sub GetChildNode(ByVal OyaNode As Object, ByVal OyaNodeName As String)
    
    Dim i As Long
    Dim ChildNode As Object
    Dim ResultSheet As Worksheet
    Dim NodeName As String
    
    Set ResultSheet = ThisWorkbook.Worksheets("Sheet1")
    RowData = RowData + 1
    
    For i = 0 To OyaNode.ChildNodes.Length - 1
        
        Set ChildNode = OyaNode.ChildNodes(i)
        
        '子タグが存在する場合は、親からのタグと最下層タグの値を出力
        If ChildNode.HasChildNodes = False Then
            
            FieldColm = FieldColm + 1
            
            ResultSheet.Cells(1, FieldColm) = OyaNodeName & OyaNode.NodeName
            
            ResultSheet.Cells(2, FieldColm) = OyaNode.Text
            
        Else
            'タグ名を取得する。
            NodeName = OyaNodeName & OyaNode.NodeName & "/"
            
        End If
    
        Call GetChildNode(ChildNode, NodeName)
            
    Next


End Sub


出力結果は実際に動かしてみていただき、ご確認いただきたいのですが、一つだけ以下に記載します。

●C1列
#document/ListInventorySupplyResponse/ListInventorySupplyResult/InventorySupplyList/member/SellerSKU
●C2列
SampleSKU3


このように「#document/ListInventorySupplyResponse/ListInventorySupplyResult/
InventorySupplyList/member/SellerSKU」タグ内の値は「SampleSKU3」であることがわかるようになります。
上記のように全てのタグと値がが「Sheet1」に表示されるプログラムとなっています。
出力方法は応用していただければと思います。

XMLタグをVBAを使用せずに取り込む方法

ちなみに今回はVBAにてXMLを取り込む方法をお伝えしましたが、VBAを使わずにEXCELに取り込む方法もあります。

EXCELでメニューバーから「開発」タブの中の「インポート」をクリックすることで、取込対象のXMLファイルを選択可能です。

取込結果はこのようになります。

単純にXMLを取り込むだけであればこの機能を使っても良いです。
ただMWSだとうまく取り込めないようなので、VBAを調整して対応する必要がありますので、その際は今回のプログラムをご使用いただければと思います。
 

以上、VBAでXMLファイルの全タグ名と値を出力する方法でした。
フッター広告

スポンサードリンク



シェアする

  • このエントリーをはてなブックマークに追加

フォローする