XML形式のファイルをブックに読み込む方法
XML形式のファイルをブックに読み込むにはいくつか方法がありますが、ここでは、2つの方法をご紹介します。
1つ目はXmlMap【エックスエムエルマップ】オブジェクトのImport【インポート】メソッドを使用する方法
2つ目はWorkbook【ワークブック】オブジェクトのXmlImport【インポート】メソッドを使用する方法です。
XML形式のファイルをブックに読み込むメソッド一覧
メソッド | 内容 |
---|---|
Import 【インポート】 | 読み込むXMLファイルの階層構造や出現する要素と そのデータ型などを定義した「XMLスキーマ」と セルやテーブルの列にXMLデータの要素の対応付けを表す XmlMap【エックスエムエルマップ】オブジェクトがあることを前提として XMLファイルを読み込むメッソッドです。 |
XmlImport 【エックスエムエルインポート】 | 「XMLスキーマ」やワークシートの対応付けがない場合でも Excelが自動でXMLスキーマや対応付けを作成し ワークシートのXMLファイルを読み込んでくれます。 |
Import【インポート】メソッド
XML形式のファイルをブックに読み込むには、XmlMap【エックスエムエルマップ】オブジェクトのImport【インポート】メソッドを使用します。
オブジェクトにはXMLスキーマとブックの対応付けを表すXmlMap【エックスエムエルマップ】オブジェクトを指定します。
Import【インポート】メソッドを実行すると、引数Url【ユーアールエル】に指定されたXMLファイルが開いて入力されている各要素のデータが対応付けられているセルやテーブルの列に読み込まれます。また、Import【インポート】メソッドは、その読み込み結果をXlXmlImportResult列挙型の定数で返します。
定数 | 値 | 内容 |
---|---|---|
xlXmlImportSuccess | 0 | XMLファイルが正常に読み込まれました。 |
xlXmlImportElementsTruncated | 1 | ワークシートに対してXMLファイルが大きすぎたため あふれたデータは切り捨てられました。 |
xlXmlImportValidationFailed | 2 | XMLファイルの内容が指定された XMLスキーマの定義と一致していません。 |
Import【インポート】メソッドの書式と設定値(引数)の説明
オブジェクト.Import( Url, Overwrite )
- オブジェクト(必須)
Workbook【ワークブック】オブジェクトのXmlMaps【エックスエムエルマップス】プロパティで取得した、XMLスキーマとブックの対応付けを表すXmlMap【エックスエムエルマップ】オブジェクトを指定します。 - Url【ユーアールエル】(必須)
読み込むXML形式のファイル名を指定します。パス(場所)も含めて指定することができます。 - Overwrite【オーバーライト】(省略可)
既存のデータを上書きするかしないかを設定します。ブール型の値で指定します。設定値 内容 True 上書きします。 False 上書きしません。(既定値)
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
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列挙型の定数で返します。
定数 | 値 | 内容 |
---|---|---|
xlXmlImportSuccess | 0 | XMLファイルが正常に読み込まれました。 |
xlXmlImportElementsTruncated | 1 | ワークシートに対してXMLファイルが大きすぎたため あふれたデータは切り捨てられました。 |
xlXmlImportValidationFailed | 2 | XMLファイルの内容が指定された 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
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形式のファイルをブックに読み込む方法についての解説を終了します。ありがとうございます。