Excel VBAでXMLデータを読み込み、データを瞬時に整理しよう!
Excelは、データ処理と整理の強力なツールとして知られています。この記事では、Excel VBAを使用して、XMLデータを読み込む方法を紹介します。XMLデータは、Webからのデータ取得やデータ交換のために広く使用されており、Excelにそのデータを効率的に統合することは非常に重要です。
また、XMLデータをExcelに読み込むメリットについて説明し、サンプルアプリの使い方を詳しく解説します。さらにVBAコードの処理内容を分かりやすく説明し、すぐに使えるようにサンプルコードを紹介したいと思います。
XMLデータをExcelに読み込むメリット
XMLデータをExcelに読み込むことには多くのメリットがあります。例えば、ウェブからのデータ取得、外部データの統合、またはXML形式で提供されたデータの分析などが考えられます。以下は、Excel VBAを使用したXMLデータの読み込みの主なメリットです。
効率的なデータ整理: XMLデータをExcelに読み込むことで、データを瞬時に整理できます。データのフィルタリング、ソート、およびグラフ化など、Excelの強力な機能を活用できます。
リアルタイムデータ更新: ウェブサイトや外部データベースからのXMLデータを定期的に更新できます。これにより、最新の情報を常に利用できます。
自動化: VBAを使用してXMLデータ読み込みを自動化できるため、手作業の作業を削減できます。
サンプルアプリの使い方
以下は、Excel VBAを使用してXMLデータを読み込むサンプルアプリです。アプリの使い方は非常に簡単です。
- シート上に配置された「XMLデータ読込み」ボタンをクリックします。
- サンプルアプリはXMLデータフォルダにある「商品データ.xml」ファイルからデータを読み込み、Excelシートにデータを表示します。
サンプルコードの処理内容
以下はVBAコードの処理内容の要約です。
詳細につきましては、次項「サンプルアプリのコード」をご覧ください。
・ MSXML2.DOMDocument60
を使用してXMLデータを読み込み、myDom
に格納します。
・ 各XML要素のデータを特定のセルに挿入します。getElementsByTagName
メソッドを使用して、特定のXML要素を選択し、それらをExcelシートの適切なセルに挿入します。
サンプルアプリのコード アプリの作成手順はこちら
以下がサンプルアプリのコードです。
Option Explicit
Sub XMLデータ読込み()
'各種変数の定義
'MSXML2ライブラリーのDOMDocument60型の変数「myDom」を宣言
Dim myDom As New MSXML2.DOMDocument60
'IXMLDOMNodeListコレクション型の変数「myNodeList」を宣言
Dim myNodeList As IXMLDOMNodeList
'XMLファイルのノードを表すオブジェクトを入れる変数を宣言
Dim myNode As IXMLDOMNode
'行カウント変数を宣言
Dim i As Integer
'カレントディレクトリ変数を宣言
Dim current As String
'コンピューターのファイル システムへアクセスするための準備
'FileSystemObjectを入れるための変数を定義
Dim objFSO As Object
'objFSOというオブジェクトにFileSystemObjectを代入
Set objFSO = CreateObject("Scripting.FileSystemObject")
'カレントディレクトリを取得する
current = objFSO.GetAbsolutePathName("../")
'XML形式のファイルがあるパスを指定して、XML形式のファイルのデータを読み込む
myDom.Load xmlSource:=current & "\デスクトップ\XMLデータ\商品データ.xml"
'読み込んだXMLデータ内で、タグ名が「no」(商品番号)である要素を取得して、IXMLDOMNodeListコレクション型の変数「myNodeList」に代入する
Set myNodeList = myDom.getElementsByTagName("no")
'5行目からデータをセットする
i = 5
'変数「myNodeList」に代入したIXMLDOMNodeListコレクション内のIXMLDOMNodeオブジェクトを1つずつ変数「myNode」に代入して、次の処理を実行する。
For Each myNode In myNodeList
'変数「myNode」に代入した要素のデータを、i行2列目のセルにセットする。
Cells(i, 2).Value = myNode.Text
'次の行に移動させるためにi変数をカウントアップする
i = i + 1
Next
'読み込んだXMLデータ内で、タグ名が「name」(商品名)である要素を取得して、IXMLDOMNodeListコレクション型の変数「myNodeList」に代入する
Set myNodeList = myDom.getElementsByTagName("name")
'5行目からデータをセットする
i = 5
'変数「myNodeList」に代入したIXMLDOMNodeListコレクション内のIXMLDOMNodeオブジェクトを1つずつ変数「myNode」に代入して、次の処理を実行する。
For Each myNode In myNodeList
'変数「myNode」に代入した要素のデータを、i行3列目のセルにセットする。
Cells(i, 3).Value = myNode.Text
'次の行に移動させるためにi変数をカウントアップする
i = i + 1
Next
'読み込んだXMLデータ内で、タグ名が「price」(値段)である要素を取得して、IXMLDOMNodeListコレクション型の変数「myNodeList」に代入する
Set myNodeList = myDom.getElementsByTagName("price")
'5行目からデータをセットする
i = 5
'変数「myNodeList」に代入したIXMLDOMNodeListコレクション内のIXMLDOMNodeオブジェクトを1つずつ変数「myNode」に代入して、次の処理を実行する。
For Each myNode In myNodeList
'変数「myNode」に代入した要素のデータを、i行4列目のセルにセットする。
Cells(i, 4).Value = myNode.Text
'次の行に移動させるためにi変数をカウントアップする
i = i + 1
Next
End Sub
読込み先のXMLファイルのコード(商品データ.xml)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order>
<commodity>商品一覧</commodity>
<goods>
<no>1</no>
<name>キーボード</name>
<price>5000</price>
</goods>
<goods>
<no>2</no>
<name>マウス</name>
<price>2500</price>
</goods>
<goods>
<no>3</no>
<name>ディスプレイ</name>
<price>20000</price>
</goods>
</order>
ディスカッション
コメント一覧
まだ、コメントがありません