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スキーマを追加して要素を対応付ける方法についての
解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク