• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel-VBAでXMLの複数ノードの取り出し)

Excel-VBAでXMLの複数ノードの取り出し

このQ&Aのポイント
  • Excel2007のVBAでXMLの扱いがわかっておらず、複数のItemノードからASINを取得するプログラムがうまくいかない。
  • MSXML2を使おうとしたらExcel2007では使えず、XMLDOMは古いため、MSXML2を使用する方法を知りたい。
  • XMLを取得するまでは成功しており、selectSingleNodeではうまく取得できるが、SelectNodesを使った場合に問題がある。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

とりあえず下記で111,222,333が取得できました。ご参考まで。 当方、Windows7Home64bit/xl2010です。 環境は異なりますが、MSXML3あたりでも動くコードだと思います。 コード中XPATHはItemLookupResponseなのに、テストデータの方はItemSearchResponseになっていますが大丈夫ですか? 'MSXML6に参照設定 Sub test() Dim XML As New MSXML2.DOMDocument60 Dim xmlItems As IXMLDOMNodeList Dim objPrice As IXMLDOMNode XML.async = False ' XML.validateOnParse = False ' XML.resolveExternals = False ' XML.preserveWhiteSpace = True XML.Load GetDesktopPath & "\test.xml" 'お示しのデータをコピペして保存 Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item") For Each objPrice In xmlItems ' ASIN If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then Debug.Print objPrice.SelectSingleNode("ASIN").Text End If Next '直接ASINまで指定しても良いと思うが... ' Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item/ASIN") ' If xmlItems.Length > 0 Then ' For Each objPrice In xmlItems ' Debug.Print objPrice.Text ' Next ' End If Set XML = Nothing End Sub Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function

yamakiyo2
質問者

お礼

プログラムまで記載頂きありがとうございました。SelectNodesの考え方はあっているようですね。 参考になりました。根本的に何かができていないようですので、頂いたプログラムで勉強します。