Excel VBA XML形式のファイルをブックに読み込む

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

XML形式のファイルをブックに読み込む方法

XML形式のファイルをブックに読み込むには
いくつか方法がありますが、ここでは、2つの方法をご紹介します。
1つ目はXmlMap【エックスエムエルマップ】オブジェクトの
Import【インポート】メソッドを使用する方法

2つ目はWorkbookオブジェクトの
XmlImport【インポート】メソッドを使用する方法です。

Import【インポート】メソッドは
読み込むXMLファイルの階層構造や出現する要素と
そのデータ型などを定義した「XMLスキーマ」と
セルやテーブルの列にXMLデータの要素の対応付けを表す
XmlMap【エックスエムエルマップ】オブジェクトがあることを
前提として、XMLファイルを読み込むメッソッドです。

一方、XmlImport【エックスエムエルインポート】メソッドは
「XMLスキーマ」やワークシートの対応付けがない場合でも
Excelが自動でXMLスキーマや対応付けを作成し
ワークシートのXMLファイルを読み込んでくれます。

Import【インポート】メソッド

XML形式のファイルをブックに読み込むには
XmlMap【エックスエムエルマップ】オブジェクトの
Import【インポート】メソッドを使用します。

オブジェクトには
XMLスキーマとブックの対応付けを表す
XmlMap【エックスエムエルマップ】オブジェクトを指定します。
Import【インポート】メソッドを実行すると
引数Url【ユーアールエル】に指定されたXMLファイルが開いて
入力されている各要素のデータが対応付けられている
セルやテーブルの列に読み込まれます。
また、Import【インポート】メソッドは
その読み込み結果をXlXmlImportResult列挙型の定数で返します。

XlXmlImportResult列挙型の定数
定数内容
xlXmlImportSuccess0XMLファイルが正常に読み込まれました。
xlXmlImportElementsTruncated1ワークシートに対してXMLファイルが大きすぎたため
あふれたデータは切り捨てられました。
xlXmlImportValidationFailed2XMLファイルの内容が指定された
XMLスキーマの定義と一致していません。

Import【インポート】メソッドの書式

オブジェクト.Import( Url, Overwrite )


  • オブジェクト(必須)
    WorkbookオブジェクトのXmlMaps【エックスエムエルマップス】プロパティで
    取得したXMLスキーマとブックの対応付けを表す
    XmlMap【エックスエムエルマップ】オブジェクトを指定します。
  • Url【ユーアールエル】(必須)
    読み込むXML形式のファイル名を指定します。
    パス(場所)も含めて指定することができます。
  • Overwrite【オーバーライト】(省略可)
    既存のデータを上書きするかしないかを設定します。

    設定値内容
    True上書きします。
    False上書きしません。(既定値)

XML形式ファイルをワークシートに読み込むコード例

◆読み込むXMLファイル(A事業商品.xml)


対応するXMLスキーマ(A事業商品.xsd)については
XLMスキーマを作成する」をご覧ください。


読み込むセル範囲をテーブルに設定して「テーブル1」と名前を付け
列項目を設定します。

Sub XML形式入力()
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"

Dim 入力結果 As XlXmlImportResult
入力結果 = ActiveWorkbook.XmlMaps("A事業商品XmlMap").Import _
      (Url:=ThisWorkbook.Path & "¥A事業商品.xml", Overwrite:=True)
If 入力結果 = xlXmlImportSuccess Then
       MsgBox "正常に読み込まれました。"
ElseIf 入力結果 = xlXmlImportElementsTruncated Then
       MsgBox "あふれたデータを切り捨てました。"
ElseIf 入力結果 = xlXmlImportValidationFailed Then
       MsgBox "データの内容がXMLスキーマの定義と一致しません。"
End If
End Sub

コードの解説

1行目~11行目
XMLスキーマとテーブルの列の対応付けのコードです。
コードの解説については
ブックにXMLスキーマを追加して要素を対応付けるをご覧ください。


13行目
【Dim 入力結果 As XlXmlImportResult】

Import【インポート】メソッドで読み込んだXML形式ファイルの
入力結果を格納する変数「入力結果」を
入力結果の定数を表すXlXmlImportResult型で宣言します。


14行目~15行目
【入力結果 = ActiveWorkbook.XmlMaps(“A事業商品XmlMap”).Import _
(Url:=ThisWorkbook.Path & “¥A事業商品.xml”, Overwrite:=True)】

WorkbookオブジェクトのXmlMaps【エックスエムエルマップス】プロパティで
ブックとの対応付けが済んだXMLスキーマである
「A事業商品XmlMap」を表す、XmlMapオブジェクトの
Import【インポート】メソッドを使用してXML形式のデータを出力します。
ここで使用されているXMLスキーマは「XMLスキーマを作成する」をご覧ください。
引数Url【ユーアールエル】には、読み込むXML形式ファイルのパスとファイル名を設定します。
パスは、thisWorkbook.Pathでこのコードが記述されたブックと同じ場所
を示し、拡張子は「xml」に設定します。
引数Overwrite【オーバーライト】は入力先に同じファイルがあった場合
上書き保存をするTrueを設定します。
そして、Import【インポート】メソッドの戻り値である入力結果を
変数「入力結果」に代入します。


16行目~17行目
【If 入力結果 = xlXmlImportSuccess Then
MsgBox “正常に読み込まれました。”】

If【イフ】ステートメントを使用して条件分岐を行います。
XML形式ファイルの入力結果が格納されている変数「入力結果」が
「xlXmlExportSuccess」だったとき、つまり
ファイルが正常に読み込まれたときを定義して
条件が成立した場合は17行目のMsgBox関数でメッセージを出力します。


18行目~19行目
【ElseIf 入力結果 = xlXmlImportElementsTruncated Then
MsgBox “あふれたデータを切り捨てました。”】

ElseIf【エルズイフ】ステートメントでもう一つの条件式を設定します。
変数「入力結果」が「xlXmlExportValidationFailed」のとき
つまり、XMLのデータがワークシートに収まらない場合
19行目のMsgBox関数でメッセージを出力します。


20行目~21行目
【ElseIf 入力結果 = xlXmlImportValidationFailed Then
MsgBox “データの内容がXMLスキーマの定義と一致しません。”】

ElseIf【エルズイフ】ステートメントでさらに、もう一つの条件式を設定します。
変数「入力結果」が「xlXmlImportValidationFailed」のとき
つまり、データの内容がXMLスキーマの定義の一致していない場合
21行目のMsgBox関数でメッセージを出力します。


実行結果


XmlImport【エックスエムエルインポート】メソッド

Xml形式のファイルをワークシートに読み込むには
Workbookオブジェクトの
XmlImport【エックスエムエルインポート】メソッドを使用します。
また、XmlImport【エックスエムエルインポート】メソッドは
その読み込み結果をXlXmlImportResult列挙型の定数で返します。

XlXmlImportResult列挙型の定数
定数内容
xlXmlImportSuccess0XMLファイルが正常に読み込まれました。
xlXmlImportElementsTruncated1ワークシートに対してXMLファイルが大きすぎたため
あふれたデータは切り捨てられました。
xlXmlImportValidationFailed2XMLファイルの内容が指定された
XMLスキーマの定義と一致していません。

XmlImport【エックスエムエルインポート】メソッドの書式

オブジェクト.XmlImport( Url, ImportMap, Overwrite, Destination )


設定値(引数)の説明

  • オブジェクト(必須)
    Workbookオブジェクトを指定します。
  • Url【ユーアールエル】(必須)
    読み込むXMLファイルのパスと名前を設定します。
  • ImportMap【インポートマップ】(必須)
    ファイルに適用するスキーマ マップ(XmlMapオブジェクト)を指定します。
    スキーママップがない場合は「Noting」を設定します。
  • Overwrite【オーバーライト】(省略可)
    読み込んだXMLデータを読み込むセル範囲を指定する
    引数Destination【ディスティネーション】を省略した場合
    引数ImportMapに指定されたスキーママップを
    上書きするかどうするかを指定します。

    設定値内容
    True上書き保存します。(既定値)
    False既存のデータに新しいデータが追加されます。

    読み込んだXMLデータを読み込むセル範囲を指定する
    引数Destination【ディスティネーション】を指定した場合
    既存のデータを上書きするかどうかを指定します。

    設定値内容
    True上書き保存します。(既定値)
    False上書きが発生する場合、インポートは取り消されます。
  • Destination 【ディスティネーション】(省略可)
    読み込んだXMLデータをセルに貼り付ける範囲を指定します。
    セル範囲の左上スミの単一のセルを指定します。

「A事業商品.xml」ファイルを読み込むコード例

Sub インポート2()
Dim 入力結果 As XlXmlImportResult
Application.DisplayAlerts = False
入力結果 = ActiveWorkbook.XmlImport _
   (Url:=ThisWorkbook.Path & "¥A事業商品.xml", ImportMap:=Nothing, Destination:=Range("A1"))
If 入力結果 = xlXmlImportSuccess Then
       MsgBox "正常に読み込まれました。"
ElseIf 入力結果 = xlXmlImportElementsTruncated Then
       MsgBox "あふれたデータを切り捨てました。"
ElseIf 入力結果 = xlXmlImportValidationFailed Then
       MsgBox "データの内容がXMLスキーマの定義と一致しません。"
End If
Application.DisplayAlerts = False
End Sub

コードの解説

2行目
【Dim 入力結果 As XlXmlImportResult】

Import【インポート】メソッドで読み込んだXML形式ファイルの
入力結果を格納する変数「入力結果」を
入力結果の定数を表すXlXmlImportResult型で宣言します。


3行目
【Application.DisplayAlerts = False】


この情報ダイアログボックスが表示されるので
Applocationオブジェクトの
DisplayAlerts【ディスプレイアラーツ】プロパティにFalseを設定して
アラートを非表示にします。


4行目~5行目
【入力結果 = ActiveWorkbook.XmlImport _
(Url:=ThisWorkbook.Path & “¥A事業商品.xml”, ImportMap:=Nothing, Destination:=Range(“A1”))】

Workbookオブジェクトの
XmlImport【エックスエムエルインポート】メソッドを使用して
XMLファイルをセルに読み込みます。
読み込むXMLファイルの場所と名前を設定する引数Urlには
「ThisWorkbook.Path」でこのコードが記述されている
ブックと同じ場所にある「A事業商品.xml」ファイルを指定します。
ファイルに適用するXmlMapオブジェクトを指定する引数ImportMapには
「Nothing」【ナッシング】を指定して、対応付けを自動で作成してもらいます。
読み込んだXMLファイルの貼り付け先を指定する引数Destinationには
貼り付けるセル範囲の左上スミに当たるA1セルを指定します。
XmlImport【エックスエムエルインポート】メソッドの戻り値である
入力結果を変数「入力結果」に代入します。


実行結果


以上で
XML形式のファイルをブックに読み込む方法についての解説を終了します。
ありがとうございます。

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

フォローする

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