Microsoft Excel VBA での XML の解析

Bilal Shahid 2023年6月21日
  1. XML パーサーの重要性
  2. VBA を使用して XML パーサーを構築する
  3. まとめ
Microsoft Excel VBA での XML の解析

この記事では、VBA で XML ファイルを解析する方法を説明します。

XML パーサーの重要性

Microsoft Excel ユーザーとして、XML ファイルの形式でデータを受け取ることはよくあることです。 XML ファイルから情報を取得し、必要に応じてシートまたは VBA マクロで使用する必要があります。

これを行う方法は、それをテキスト ファイルとして扱い、情報を解析することです。 しかし、これは XML ファイルを解析する洗練された方法ではありません。なぜなら、情報はタグを使用して適切に構造化されて格納されており、それをテキスト ファイルとして扱うと、この概念が無効になるからです。

したがって、XML パーサーを使用する必要があります。 XML パーサーは、XML ファイルを読み取り、関連データを取得して、すぐに使用できるようにします。

VBA を使用して XML パーサーを構築する

VBA を使用して XML ファイルを解析し、データを Excel シートに変換できます。 これから使用するメソッドは、XML Document Object Model の略である XML DOM 実装を使用します。このモデルにより、XML ファイルを必要に応じて操作できるオブジェクトとして表すことができます。

VBA を使用して XML ファイルの解析を開始するには、一連の簡単な手順を実行する必要があります。 これらについて以下に説明します。

XML を VBA で解析するには、システムに MSXML.4.0 以降が必要です。

  • Microsoft XML への参照を追加

    まず、VBA エディターで Microsoft XML, V6.0 への参照を追加する必要があります。 これはそれがどのように行われるかです:

    Excel の [開発] タブから VBA エディターを開きます。

  • メニューで、[ツール] > [参照] に移動します。

    参照に移動

  • 下にスクロールして Microsoft XML, V6.0 をチェックし、OK をクリックします。

    Microsoft XML V6.0 リファレンスを追加

    Microsoft XML のバージョンは、コンピュータにインストールされているオペレーティング システムと Microsoft Office によって異なります。

  • XMLファイルをXML DOMにロードするVBAコードを書く

    次の XML ファイルがあるとします。

    <?xml version="1.0" encoding="ISO8859-1" ?>
    <menu>
    <food>
    <name> Halwa Puri </name>
    <price> $7.50 </price>
    <description> Halwa Puri is from Indian and Pakistani cuisines, having the sweet Halwa and the savory Puri which is a fried flatbread. </description>
    <calories> 900 </calories>
    </food>
    </menu>
    

    次のコードを使用して、次の方法で XML DOM オブジェクトを作成することにより、VBA を介してこの XML ファイルを解析できます。

    Sub XMLParser()
    
    Dim xDoc As New MSXML2.DOMDocument60
    Dim node As IXMLDOMElement
    Set xDoc = New MSXML2.DOMDocument60
    
    With xDoc
    .async = False
    .validateOnParse = True
    
    If xDoc.Load("D:\VBA\example.xml") = False Then
    Debug.Print .parseError.reason, .parseError.ErrorCode
    Exit Sub
    End If
    
    Set node = xDoc.SelectSingleNode("//price")
    MsgBox node.Text
    End With
    
    End Sub
    

上記のコードでは、最初に MSXML2.DOMDocument60 型の変数 xDoc を作成しました。 ここでは、Microsoft XML のバージョン 6.0 を使用しているため、最後に 60 を追加しました。60 がないと、このコードは ユーザー定義型が見つかりません のコンパイル時エラーを生成します。 .

次に、With ステートメントを使用して、xDoc 変数を操作していることを指定しました。 .async プロパティは非同期ダウンロードの許可を定義し、.validateOnParse プロパティはパーサーが XML ドキュメントを検証する必要があるかどうかを示します。

その後、.Load 関数を使用して、指定された XML ファイルを DOM 変数にロードします。 ここで、パスとファイル名をコンピュータ上のものに変更できます。

次の 2 行は、XML ファイルが正しくロードされなかった場合のエラー処理です。 ロードが機能したかどうかをテストするために、ファイルから 1つのノードを取得し、その名前を price として指定します。

ノード名は大文字と小文字が区別され、XML ファイルに従って指定する必要があることに注意してください。 最後に、メッセージ ボックスに node.Text プロパティを使用して価格を表示します。

出力:

XML ファイルを XML DOM に読み込む

これは、読み込みが完全に正常に行われたことを示しています。

XML ファイル データを使用する 1つの方法は、Excel シートに格納することです。 上記のコードをいくつか変更して、データを Excel シートに保存します。

Sub XMLParser()

Dim xDoc As New MSXML2.DOMDocument60
Set xDoc = New MSXML2.DOMDocument60
Dim list As MSXML2.IXMLDOMNodeList
Dim osh As Worksheet
Set osh = ThisWorkbook.Sheets("Sheet1")
oRow = 1

With xDoc
.async = False
.validateOnParse = True

If xDoc.Load("D:\VBA\example.xml") = False Then
Debug.Print .parseError.reason, .parseError.ErrorCode
Exit Sub
End If

Set list = xDoc.SelectNodes("//price")
loopCount = 0
For Each node In list
oRow = oRow + 1
osh.Range("A" & oRow) = node.Text
Next
End With

End Sub

ここでは、すべての price ノードを取得してシートに保存しています。 この例では、次のようにシートに保存される price ノードが 1つだけあります。

XMLファイルのデータを使ってExcelシートに格納

XML ファイルと要件に従って、コードを微調整できます。

まとめ

これは、VBA を介して XML ファイルを解析する方法に関する議論を要約したものです。 この記事では、VBA で XML DOM を使用して XML パーサーを作成する方法を学びました。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub