Web 上に XML データがあります。これらは、ゲーム内アイテムの価格と価格データです。
https://api.eve-central.com/api/marketstat?regionlimit=10000002&typeid=34
関数を呼び出してSINGLE値を取得します (たとえば、最高の買い注文):
A B
1 ItemID buy/max
2 34 =ImportXML("https:// ... &typeid=34", "//buy/max")
3 35
関数は次のようになります。
Function ImportXML(url As String, query As String)
Dim document As MSXML2.DOMDocument60
Dim http As New MSXML2.XMLHTTP60
http.Open "GET", url, False
http.send
Set document = http.responseXML
ImportXML = document.SelectSingleNode(query).nodeTypedValue
End Function
1 つの値で問題ありません。500 個のアイテムを取得すると、データの取得に非常に時間がかかります。複数のセル (この場合は 2 つだけ) を入力するには、&typeid=35を追加して入力リンクを変更する必要があります。
https://api.eve-central.com/api/marketstat?regionlimit=10000002&typeid=34&typeid=35
そのリンクを使用すると、2 つの値をMsgBoxに取得できます。しかし、そのデータで作業する必要があるため、セルB3でそれが必要です。コードは次のようになります。
Function ImportXML(url As String, query As String)
Dim document As MSXML2.DOMDocument60
Dim http As New MSXML2.XMLHTTP60
http.Open "GET", url, False
http.send
Set document = http.responseXML
Dim R As Integer
Dim C As Integer
R = ActiveCell.Row '<- these variables are for changing'
C = ActiveCell.Column '<- output cell'
Set xmlNodeList = document.SelectNodes(query)
For Each xmlNode In xmlNodeList
Cells(R, C) = xmlNode.nodeTypedValue '<- THIS LINE CAUSE AN ERROR'
'MsgBox xmlNode.nodeTypedValue <- if that line is active I got correct result'
R = R + 1 'but in MsgBox'
Next xmlNode
End Function
クエリからセルにデータを書き込もうとすると、問題が発生します。私が達成しようとしているのは、 Google スプレッドシート Web サービスのImportXML関数と同様の動作です。Excel 2013 を持っていないので、WEBSERVICE関数またはFILTERXMLとXPathを使用できません。VBAでコーディングしたことはありません。ここに最終的なコードを入れていただければ幸いです。