« 【株】 2010/01/15(金) -1200 日経△74.42 | トップページ | 【株】 2010/01/18(月) +1600 日経▲127.02 »

【Excel VBA備忘ログ】 2010/1/17 ExcelVBAでXMLを取得するには

Excel VBAを使って、WebサービスなどからXMLファイルを取得する方法です。以下はMyMiniCityという、アクセスに応じて街が発展するというWebサービスでの使用例(Excel 2000で確認)。

例えば、私のMyMiciCityはhttp://hipu-city.myminicity.com/というURLになりますが、末尾に「xml/」を付けると、現在の街のパラメータがXMLファイルとして取得出来ます(http://hipu-city.myminicity.com/xml/)

取得出来るXMLファイルの中身はこんな具合になってます。

<?xml version="1.0" encoding="UTF-8" ?>
<city>
 <host>hipu-city.myminicity.com</host>
 <name>hipu-city</name>
 <region code="JP">japan</region>
 <ranking>1033</ranking>
 <population>994</population>
 <incomes>224350</incomes>
 <unemployment>4</unemployment>
 <transport>96</transport>
 <criminality>2</criminality>
 <pollution>0</pollution>
 <nextnuke>1</nextnuke>
 <signatures>0</signatures>
 <bases com="0" env="100" ind="301" sec="168" tra="170"/>
</city>


XMLパーサとしてMSXMLを使用するため、その準備としてVisualBasicEditorメニューの「ツール」-「参照設定」-「Microsoft XML, vX.X」にチェックを入れておきます。

VBAで読み込む場合のコード例です。

Sub GetXMLCode()

    Dim XMLDocument As MSXML2.DOMDocument
    Dim xmlRootNode1 As IXMLDOMNode
    Dim xmlRootNode2 As IXMLDOMNode
    Dim xmlURL As String
   
    'MSXMLオブジェクトの生成
    Set XMLDocument = New MSXML2.DOMDocument
    '同期読み出しモード "async"はasyncronous(非同期)※
    XMLDocument.async = False
    xmlURL = "http://hipu-city.myminicity.com/xml"

    Set xmlRootNode1 = XMLDocument.childNodes.Item(0)
    Set xmlRootNode2 = XMLDocument.childNodes.Item(1)
    Debug.Print "-- xmlRootNode1"
    Debug.Print xmlRootNode1.xml
    Debug.Print xmlRootNode1.text
    Debug.Print "-- xmlRootNode2"
    Debug.Print xmlRootNode2.xml
    Debug.Print xmlRootNode2.text
    Debug.Print "-- xmlRootNode2.childNodes"
    Debug.Print xmlRootNode2.childNodes(0).xml
    Debug.Print xmlRootNode2.childNodes(0).Text
    Debug.Print xmlRootNode2.childNodes(1).xml
    Debug.Print xmlRootNode2.childNodes(1).Text
    Debug.Print xmlRootNode2.childNodes(2).xml
    Debug.Print xmlRootNode2.childNodes(2).Text
    Debug.Print xmlRootNode2.childNodes(3).xml
    Debug.Print xmlRootNode2.childNodes(3).Text
  ・
  ・

    If Not XMLDocument Is Nothing Then Set XMLDocument = Nothing
    If Not xmlRootNode1 Is Nothing Then Set xmlRootNode1 = Nothing
    If Not xmlRootNode2 Is Nothing Then Set xmlRootNode2 = Nothing
End Sub


Debug.Printしてみると以下の通り取得できてます。


-- xmlRootNode1
<?xml version="1.0"?>
version="1.0" encoding="UTF-8"
-- xmlRootNode2
<city>
    <host>hipu-city.myminicity.com</host>
    <name>hipu-city</name>
    <region code="JP">japan</region>
    <ranking>1033</ranking>
    <population>994</population>
    <incomes>224350</incomes>
    <unemployment>4</unemployment>
    <transport>96</transport>
    <criminality>2</criminality>
    <pollution>0</pollution>
    <nextnuke>1</nextnuke>
    <signatures>0</signatures>
    <bases com="0" env="100" ind="301" sec="168" tra="170"/>
</city>
hipu-city.myminicity.com hipu-city japan 1033 994 224350 4 96 2 0 1 0
-- xmlRootNode2.childNodes
<host>hipu-city.myminicity.com</host>
hipu-city.myminicity.com
<name>hipu-city</name>
hipu-city
<region code="JP">japan</region>
japan
<ranking>1033</ranking>
1033



※非同期読み出しを行うと読み出しが完了した時点でコールバックにて通知されようになるため、読み込みに時間が掛かったりした時にアプリケーションが固まる事が無くなります。

« 【株】 2010/01/15(金) -1200 日経△74.42 | トップページ | 【株】 2010/01/18(月) +1600 日経▲127.02 »

Excel」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/36872/33021883

この記事へのトラックバック一覧です: 【Excel VBA備忘ログ】 2010/1/17 ExcelVBAでXMLを取得するには:

« 【株】 2010/01/15(金) -1200 日経△74.42 | トップページ | 【株】 2010/01/18(月) +1600 日経▲127.02 »

amazon

マイリスト

  • 暮らしをおトクにかえていく|ポイントインカム
  • 暮らしをおトクにかえていく|ポイントインカム
  • フルーツメール
無料ブログはココログ