Excel VBA ブックにXMLスキーマを追加して要素を対応付ける

スポンサーリンク

ブックにXMLスキーマを追加して要素を対応付ける

Excelを使用してXML形式のファイルを入出力する場合は、XMLデータの文書構造やデータ型などを定義した「XMLスキーマ」をXmlMaps【エックスエムエルマップス】コレクションのAdd【アド】メソッドを使用してブックに追加し、ワークシートのセルやテーブルの列にXMLデータの要素をXpath【エックスパス】オブジェクトのSetValue【セットバリュー】メソッドで対応付けることにより、XML形式でデータを出力したり、XML形式のデータを読み込んだりすることができるようになります。

XmlMaps.Add【エックスエムエルマップス アド】メソッド

ブックにXMLスキーマを追加するには、XmlMaps【エックスエムエルマップス】コレクションのAdd【アド】メソッドを使用します。

XmlMaps【エックスエムエルマップス】コレクションはWorkbook【ワークブック】オブジェクトのXmlMaps【エックスエムエルマップス】プロパティで参照します。

XmlMaps.Add【エックスエムエルマップス アド】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.XmlMaps.Add( Schema[, RootElementName] )

  • オブジェクト(必須)
    WorkBook【ワークブック】オブジェクトを指定します。
  • Schema【スチーマ】(必須)
    ブックに追加したいXMLスキーマを指定します。XMLが保存されているパス(場所)も含めて指定できます。また、URL形式での指定も可能です。
  • RootElementName【ルートエレメントネーム】(省略可)
    XMLスキーマで、複数のルート要素が定義されている場合に、ブックに対応付けさせたいルート要素を指定します。定義されているルート要素が1つだけの場合は省略します。

Xpath.SetValue【エックスパス セットバリュー】メソッド

セルやテーブルの列にXMLデータの要素を対応付けるには、Xpath【エックスパス】オブジェクトの
SetValue【セットバリュー】メソッドを使用します。

Xpath.SetValue【エックスパス セットバリュー】メソッドの書式と設定値の説明

[]内は省略可能です。
オブジェクト.Xpath.SetValue(Map, Xpath[, SelectionNamespace], Repeating)

  • オブジェクト(必須)
    セルに対応付ける場合はRange【レンジ】オブジェクトを指定し、テーブルの列に対応付ける場合は、テーブル内の列を表すListColumn【リストカラム】オブジェクトを指定します。
  • Map【マップ】(必須)
    XMLスキーマとブックの対応付けを表すXmlMap【エックスエムエルマップ】オブジェクトを指定します。
  • Xpath【エックスパス】(必須)
    対応したい要素の階層位置(ローケーションパス)を表す文字列を指定します。仮想的なルート要素を表す「/スラッシュ」に続けて対応付けたい要素までの階層をたどる要素名を「/スラッシュ」で区切って記述します。
  • SelectionNamespace【セレクションネームスペース】(省略可)
    引数Xpathに指定した文字列内で使用している名前空間接頭辞を指定します。使用していない場合は省略します。
  • Repeating【リピーティング】(必須)
    設定値 内容
    True テーブルの列に対応付ける場合
    False 単一のセルに対応付ける場合

ブックにXMLスキーマを追加して
列にXMLデータの要素を対応付けるコードと解説


※対応する「XMLスキーマ」については「XMLスキーマを作成する」をご覧ください。

Sub スキーマ対応付け()
Dim myxmlmap As XmlMap
Set myxmlmap = ActiveWorkbook.XmlMaps.Add _
(Schema:=ThisWorkbook.Path & "¥A事業商品.xsd")
With ActiveSheet.ListObjects("テーブル1")
.ListColumns(1).XPath.SetValue Map:=myxmlmap, _
XPath:="/A事業/商品/商品名", Repeating:=True
.ListColumns(2).XPath.SetValue Map:=myxmlmap, _
XPath:="/A事業/商品/価格", Repeating:=True
End With
myxmlmap.Name = "A事業商品XmlMap"
End Sub
2行目【Dim myxmlmap As XmlMap】
ブックに追加するXMLスキーマを格納する変数「myxmlmap」をオブジェクト型(XmlMap)で宣言します。


3行目~4行目Set myxmlmap = ActiveWorkbook.XmlMaps.Add _
(Schema:=ThisWorkbook.Path & “¥A事業商品.xsd”)

XmlMaps【エックスエルマップス】コレクションのAdd【アド】メソッドを使用してブックに引数Schema【スキーマ】に指定したXMLスキーマを追加して、Setキーワードを使用してオブジェクト変数「myxmlmap」に代入します。


5行目【With ActiveSheet.ListObjects(“テーブル1”)】
Worksheet【ワークシート】オブジェクトのListObjects【リストオブジェクツ】プロパティでテーブルに設定した「テーブル1」を参照してWith【ウィズ】ステートメントで指定します。


6行目~7行目【 .ListColumns(1).XPath.SetValue Map:=myxmlmap, _
XPath:=”/A事業/商品/商品名”, Repeating:=True】

With【ウィズ】ステートメントで指定したセルのデータ範囲(テーブル)を表すListObject【リストオブジェクト】のListColumns【リストカラムス】プロパティの引数に1を設定しテーブルの1列目を参照してXPath【エックスパス】プロパティで参照した列のXPath【エックスパス】オブジェクトを取得します。

単独のセルに対応付ける場合は、Range【レンジ】オブジェクトのXPath【エックスパス】プロパティを使用してXPath【エックスパス】オブジェクトを取得します。

取得したXPath【エックスパス】オブジェクトのSetValue【セットバリュー】メソッドを使用してテーブルの列にXMLデータの要素を対応付けます。

引数Map【マップ】には、Addメソッドでブックに追加したXMLスキーマが格納されている変数「myxmlmap」を設定します。引数XPath【エックスパス】には、対応付けたい要素の階層位置を対応付けたい要素までの階層をスラッシュで区切って文字列で設定します。引数Repeating【リピーティング】はテーブルの列に対応付けるのでTrueを設定します。


8行目~9行目【 .ListColumns(2).XPath.SetValue Map:=myxmlmap, _
XPath:=”/A事業/商品/価格”, Repeating:=True】

テーブルの2列目の対応付けです。内容は基本的に6~7行目と同じです。


11行目【myxmlmap.Name = “A事業商品XmlMap”】
Name【ネーム】プロパティを使用してブックに追加したXMLスキーマに名前をつけます。


実行結果



以上で、ブックにXMLスキーマを追加して要素を対応付ける方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告