Excelのデータを用いてGoogle Earthにプレイスマークをプロット

Excelに入力された位置情報データを用いて,Google Earth上にプレイスマークをプロットさせることが出来れば,簡易なGISとして活用することが可能となります。以下では,橋梁の点検結果から評価した健全度をマッピングしてみることにします。
“Excelのデータを用いてGoogle Earthにプレイスマークをプロット” の続きを読む

XMLのノードに要素を追加するVBA関数

ExcelとWebGISを連携させるときには,電子国土であれGoogleMapであれ,ExcelのデータをXMLファイルに変換する必要があります。
たった一つのノードを追加するだけでも結構面倒な手順になるので、関数を作って可読性を高めてみる試みをしてみました。

何をする関数か

次のような属性・値と内容を持った要素を追加する場合,

VBAでは以下のようなコードを書かなければなりません。(変数宣言などは省略します)

このように,1行のXMLの要素を追加するだけでも最低2行,内容や属性・値を追加すると3~4行になってしまいます。

上記のようなやり方を改善し、コードの記述を短く、可読性を高めて何をやっているかわかるようにすることが狙いです。
関数を読んだり変数の受け渡しは増えるので、速度は若干遅くなるかもしれませんが、試してみた結果,わかるほど遅くなるわけでもなく十分実用の範囲だったので,今後はこれで行こうと思います。

関数の作り方

関数名

AddElement = 要素を追加する

引数

  • xd ; 要素を追加するXMLドキュメントオブジェクト
  • ParentNode ; 追加される親ノードのXML要素オブジェクト
  • elm ; 追加する要素名
  • Txt ; 要素の内容[省略化]
  • Attr1(~Attr4); 要素の属性(4つまで)[省略化]
  • AttrText1(~AttrText4); 要素の属性に設定する値(4つまで)[省略化]

戻り値

  • 追加されるXML要素オブジェクト

動作確認状況

Excel 32ビット 64ビット
2007 OK
2010 たぶんOK(未確認) たぶんOK(未確認)
2011 Mac NG
2013 OK OK

2007, 2013の32ビットおよび2013の64ビットで動作確認しました。MSXMLの参照設定があるため、2011 Macでは動作しません。

ソースコード

標準モジュールを用意して、以下のコードを記述します。

関数の使い方

事前の準備

作成するXMLドキュメントのオブジェクトや使用する要素オブジェクトの変数宣言などをします。

内容のみの要素を追加

引数は要素名,内容までを指定し,属性以降は省略します。

xmlDocオブジェクトのParenteElementの中に以下の要素が追加されます。

内容なしで属性・値を追加

引数は内容のみ省略します。

以下のように内容なし,属性・値ありの要素が追加されます。属性を4つ以上追加する場合は関数を拡張する必要があります。

要素をネストする場合

XML要素オブジェクト変数を必要なだけ用意する必要があります。

以下のようにネストされた構造になります。

使用例

この関数を使って、Google Earthにプレイスマークをプロットするためのkmlファイルを作成することができます。