すみません、いつも、いろいろな方に助けて頂いていますが、また、初歩的な質問をさせて頂きます。
Excel2007のVBAでXMLの扱いが良くわかっておりません。
以下のプログラムで複数ItemのASINを出力したいのですが、うまくいきません。
XMLがきちんと取得できているのはWireSharkでキャプチャして確認できております。
VBAで表示出力するのがうまくいきません。ご教授方よろしくお願いします。
selectSingleNodeで一つの場合はうまく取り出せています。複数ノードの場合にSelectNodesの使い方に問題がありますでしょうか?
型の宣言などに誤りがありますでしょうか?
また、基本的なことですが、MSXML2を使おうとしたら、Excel2007で使えませんでした。
XMLDOMは、サポート切れ?で古いので、MSXML2を使うのが良いとWebで見ました。
DLLなどが必要な気がしているのですが、よくわかっていないのでご教授頂きたいです。
すみませんが、よろしくお願いします。
*****VBAプログラム(抜粋)******
Dim xml As Object, xmlItems As Object, objPrice As Object
'XML オブジェクト作成
Set xml = CreateObject("Microsoft.XMLDOM")
xml.async = False
xml.Load URI
Set xmlItems = xml.SelectNodes("ItemLookupResponse/Items/Item")
For Each objPrice In xmlItems
' ASIN
If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then
curWS.Cells(rowIndex, ASINCol) = objPrice.SelectSingleNode("ASIN").text
End If
Next
*****取得したXML(抜粋)******
<ItemSearchResponse >
<Items>
<Item>
<ASIN>111</ASIN>
</Item>
<Item>
<ASIN>222</ASIN>
</Item>
<Item>
<ASIN>333</ASIN>
</Item>
</Items>
</ItemSearchResponse>
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
プログラムまで記載頂きありがとうございました。SelectNodesの考え方はあっているようですね。
参考になりました。根本的に何かができていないようですので、頂いたプログラムで勉強します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Amazon アメリカAmazon(Amazon.com)で商品の検索をしてもASINコードが表示されません。 ア 1 2023/03/28 18:32
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA でxmlの全要素・属性の読み込み
Visual Basic(VBA)
-
XPathで途中に名前空間が設定されていると狙った要素を指定できない
XML
-
vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業)
Visual Basic(VBA)
-
-
4
vbaでxmlからNodeListでデータがない時、空欄で取得する方法
Visual Basic(VBA)
-
5
XMLをエクセルに取り込むマクロ
Visual Basic(VBA)
-
6
VBAでXML文書のある特定タグ以下の内容をそのまま取得したい
XML
-
7
あるノードリストに、特定の名前のノードが存在するかどうか調べたい
XML
-
8
VB2005でXMLデータから複数ある要素の入れ子を取得する方法
Visual Basic(VBA)
-
9
XMLからデータを取得
Visual Basic(VBA)
-
10
Access VBAでXMLが読み込めない
Visual Basic(VBA)
-
11
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
12
同じタグ名の項目取得
XML
-
13
XMLでのAttributeを持ったNodeの追加方法
Visual Basic(VBA)
-
14
ExcelのVBAで、XMLファイルのデータ抽出
Excel(エクセル)
-
15
XML文書の指定した属性値を持つノードを取得したい
XML
-
16
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XML同じ名前の要素を自動で集約...
-
あせんうぶり言語
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
Access VBAでXMLが読み込めない
-
空かスペースを認識させること...
-
SNMP リンクダウンとノードダ...
-
u_shortなどの省略した宣言につ...
-
eclipseへのxmlファイル追加
-
ルート要素ノードが2個ある場合?
-
バッチファイルでテキストファ...
-
XMLを出力する時のエラー原因
-
VBでXMLファイルを作ると xmlns...
-
C# TreeView 効率良いノード追...
-
複数のXMLファイルからデータを...
-
VBAのXML処理でメモリが足りない?
-
XMLの要素の内容の中に要素
-
終了タグが認識されない?
-
Visual Basic .NET の識別子は...
-
XSLで、XMLの空タグを制御したい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAでXMLの複数ノードの...
-
VBSでxmlの値を書き換えたい
-
XML同じ名前の要素を自動で集約...
-
XMLのタグ名に予約語は禁止?
-
妥当なXML文書
-
エラーメッセジの意味が分かり...
-
TOMCAT起動エラー
-
XMLの名前空間について
-
robots.txtの設置場所
-
RSSファイルの拡張子はどれが正...
-
sitemap.xmlとrobots.txtの関係
-
ANTのbuild.xmlに日本語コメン...
-
サイトマップの作り方。
-
XMLからデータを取得
-
mac 10.9.3に英辞郎を導入する
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
昔Winnyってありましたけど、あ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
おすすめ情報