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 のバージョンは、コンピュータにインストールされているオペレーティング システムと 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 ファイル データを使用する 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 ファイルと要件に従って、コードを微調整できます。
まとめ
これは、VBA を介して XML
ファイルを解析する方法に関する議論を要約したものです。 この記事では、VBA で XML DOM
を使用して XML パーサーを作成する方法を学びました。
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