アップデート
以下に示す手順は、XMLDOMオブジェクトを使用してVBAでXMLを解析する例を示しています。コードは、 XMLDOMの初心者ガイドに基づいています。
Public Sub LoadDocument()
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
xDoc.validateOnParse = False
If xDoc.Load("C:\My Documents\sample.xml") Then
' The document loaded successfully.
' Now do something intersting.
DisplayNode xDoc.childNodes, 0
Else
' The document failed to load.
' See the previous listing for error information.
End If
End Sub
Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As MSXML.IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
If xNode.nodeType = NODE_TEXT Then
Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _
":" & xNode.nodeValue
End If
If xNode.hasChildNodes Then
DisplayNode xNode.childNodes, Indent
End If
Next xNode
End Sub
Nota Bene-この最初の答えは、私が想像できる最も単純なことを示しています(私が非常に特定の問題に取り組んでいたとき)。当然、VBAXMLDomに組み込まれているXML機能を使用する方がはるかに優れています。上記の更新を参照してください。
元の応答
これは非常に古い投稿であることは知っていますが、この複雑な質問に対する私の簡単な解決策を共有したいと思いました。主に、基本的な文字列関数を使用してxmlデータにアクセスしました。
これは、VBA関数内で返されたxmlデータ(一時変数内)があることを前提としています。興味深いことに、値を取得するためにxmlWebサービスにリンクしている方法もわかります。このExcelVBA関数は、セル内から= FunctionName(value1、value2)を使用してアクセスし、Webサービスを介してスプレッドシートに値を返すことができるため、画像に示されている関数もルックアップ値を取ります。
openTag = ""
closeTag = ""
' Locate the position of the enclosing tags
startPos = InStr(1, temp, openTag)
endPos = InStr(1, temp, closeTag)
startTagPos = InStr(startPos, temp, ">") + 1
' Parse xml for returned value
Data = Mid(temp, startTagPos, endPos - startTagPos)