Excel VBAのMSXML(Microsoft XML)ライブラリは、XMLデータの操作やWebサービスとの通信を行うための強力なツールです。MSXMLライブラリを使用することで、Excelから直接インターネット上のリソースにアクセスし、XMLデータの読み書きや解析を行うことができます。以下に、MSXMLライブラリの主要な機能と実用例を説明します。
主な機能
XMLHTTPオブジェクト
HTTPリクエストを送信し、サーバーからの応答を受け取るためのオブジェクト。Webサービスとの通信に使用されます。
DOMDocumentオブジェクト
XML文書を解析し、操作するためのオブジェクト。XMLデータの読み込み、操作、保存が可能です。
XSLTemplateオブジェクト
XSLTスタイルシートを使用してXML文書を変換するためのオブジェクト。
例題1: HTTPリクエストを送信してWebサービスからデータを取得
Microsoft XML ライブラリの参照設定
VBAエディタを開く:ExcelでAlt + F11を押してVBAエディタを開きます。
照設定を開く:VBAエディタでツールメニューをクリックし、参照設定を選択します。
Microsoft XML ライブラリを選択:リストから「Microsoft XML, v6.0」にチェックを入れます。リストに表示されていない場合は、下にスクロールして探してください。
以下の例では、MSXMLライブラリを使用してHTTPリクエストを送信し、Webサービスからデータを取得してExcelシートに表示する方法を示します。
Sub GetDataFromWebService()
    ' MSXMLライブラリの参照設定が必要
    ' 参照設定: Microsoft XML, v6.0
    Dim xmlHttp As MSXML2.XMLHTTP60
    Dim url As String
    url = "https://api.exchangerate-api.com/v4/latest/USD"
    ' XMLHTTPオブジェクトの作成
    Set xmlHttp = New MSXML2.XMLHTTP60
    ' HTTPリクエストの送信
    xmlHttp.Open "GET", url, False
    xmlHttp.send
    ' サーバーの応答を取得
    Dim response As String
    response = xmlHttp.responseText
    ' 応答をメッセージボックスに表示
    MsgBox response, vbInformation, "Webサービスからの応答"
    ' Excelシートにデータを表示
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells(1, 1).Value = response
    ' リソースの解放
    Set xmlHttp = Nothing
End Subこのコードでは、XMLHTTPオブジェクトを使用してWebサービスから為替レートデータを取得し、その応答をメッセージボックスに表示し、Excelシートに書き込んでいます。
例題2: XMLデータの解析と操作
次に、MSXMLライブラリを使用してXMLデータを解析し、その内容をExcelシートに表示する方法を示します。
Sub ParseXMLData()
    ' MSXMLライブラリの参照設定が必要
    ' 参照設定: Microsoft XML, v6.0
    Dim xmlDoc As MSXML2.DOMDocument60
    Dim xmlNode As MSXML2.IXMLDOMNode
    Dim xmlNodes As MSXML2.IXMLDOMNodeList
    ' XML文書の読み込み
    Set xmlDoc = New MSXML2.DOMDocument60
    xmlDoc.async = False
    xmlDoc.Load ("C:\path\to\your\file.xml")
    ' ノードの取得
    Set xmlNodes = xmlDoc.SelectNodes("//YourNodeName")
    ' Excelシートにデータを表示
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)
    Dim i As Integer
    i = 1
    For Each xmlNode In xmlNodes
        ws.Cells(i, 1).Value = xmlNode.Text
        i = i + 1
    Next xmlNode
    ' リソースの解放
    Set xmlDoc = Nothing
    MsgBox "XMLデータの解析が完了しました。", vbInformation, "完了"
End Subこのコードでは、DOMDocumentオブジェクトを使用してXMLファイルを読み込み、特定のノードの内容をExcelシートに表示しています。
例題3: XMLデータの作成と保存
以下の例では、MSXMLライブラリを使用して新しいXMLデータを作成し、ファイルに保存する方法を示します。
Sub CreateAndSaveXML()
    ' MSXMLライブラリの参照設定が必要
    ' 参照設定: Microsoft XML, v6.0
    Dim xmlDoc As MSXML2.DOMDocument60
    Dim root As MSXML2.IXMLDOMElement
    Dim child As MSXML2.IXMLDOMElement
    ' 新しいXML文書の作成
    Set xmlDoc = New MSXML2.DOMDocument60
    ' ルート要素の作成
    Set root = xmlDoc.createElement("Root")
    xmlDoc.appendChild root
    ' 子要素の作成
    Set child = xmlDoc.createElement("Child")
    child.Text = "Hello, XML!"
    root.appendChild child
    ' XML文書の保存
    xmlDoc.Save "C:\path\to\your\newfile.xml"
    ' リソースの解放
    Set xmlDoc = Nothing
    MsgBox "XMLデータの作成と保存が完了しました。", vbInformation, "完了"
End Subこのコードでは、DOMDocumentオブジェクトを使用して新しいXML文書を作成し、指定したパスに保存しています。
エラー修正:ユーザー定義型は定義されていません
「ユーザー定義型は定義されていません」というエラーは、MSXML2.XMLHTTP60オブジェクトを認識できないことが原因です。これは、VBAで使用する前にMicrosoft XMLライブラリへの参照設定が適切に行われていないか、MSXML2.XMLHTTP60がシステムにインストールされていないためです。
参照設定の確認と修正
VBAでMSXMLライブラリを使用するためには、まず参照設定を行う必要があります。次の手順で確認と設定を行ってください。
- ExcelのVBAエディタを開きます (Alt + F11)。
- メニューから「ツール」 > 「参照設定」を選択します。
- 「Microsoft XML, v6.0」を探してチェックを入れます。
- MSXML2.XMLHTTP60が利用できるのは「Microsoft XML, v6.0」が正しくインストールされている場合です。
 
- OKを押して設定を保存します。
結論
MSXMLライブラリを使用することで、Excel VBAから直接XMLデータを操作し、Webサービスと通信することが可能です。XMLHTTPオブジェクトを使用してWebサービスからデータを取得し、DOMDocumentオブジェクトを使用してXMLデータを解析、操作、保存できます。これらのツールを駆使することで、データの取得や管理が飛躍的に向上し、業務効率化に大いに貢献します。

