こんにちは、Ryoです。
Excelを扱っている中で、用途によってはデータをXMLにしたいこともあるかと思います。その場合はスプレッドシート形式として保存するのですが、VBAでもSaveAsメソッドを使用してXMLスプレッドシートとしての保存やOpenXMLメソッドを利用してXMLデータファイルを開くことができますので、今回はその内容について書いていきます。
1.サンプル概要
先ずXMLスプレッドシートとしての保存ですが、サンプルとして簡単な表を作成し、Sheet名を「Sample_Sheet」としています。
このSample_SheetをXMLスプレッドシートとして保存します。実行後はファイル名表記が「Sample_Spreadsheet.xml」になります。
XMLスプレッドシート形式で保存しましたので、メモ帳などのテキストエディタで編集することができます。下の画像は保存したファイルをメモ帳で開いたものです。
XMLスプレッドシートを開く場合は先程保存したファイル「Sample_Spreadsheet.xml」をOpenXMLメソッドで指定して開きますので、この辺りは後述のサンプルコードで説明します。
以上が概要になります。
2.サンプルコード
◆XMLスプレッドシートとして保存
Sub Sample1() '***XMLスプレッドシートとして保存*** 'Sheeet名「Sample_Sheet」をXMLスプレッドシートとして保存 Worksheets("Sample_Sheet").SaveAs Filename:=ThisWorkbook.Path _ & "\Sample_Spreadsheet.xml", FileFormat:=xlXMLSpreadsheet End Sub
XMLスプレッドシートとして保存するにはSaveAsメソッドを使用します。
構文:
Object.SaveAs(FileName,FileFormat,Password,WriteResPassword,
ReadOnlyRecommended,CreateBackup,AddToMru,TextCodepage,
TextVisualLayout,Local)
引数がかなりあって構文だけを見ると判り難いかもしれませんが、ここで使用するのはFileNameとFileFormatだけでOKです。
FileNameには保存するファイル名を指定しますので、Filename:=ThisWorkbook.Path & “\Sample_Spreadsheet.xml”とし、FileFormatにはXMLスプレッドシートとして保存する為にFileFormat:=xlXMLSpreadsheetとしています。
このサンプルコードを実行すれば、実行元の保存先と同じ場所にXMLスプレッドシートとして保存されます。
◆XMLスプレッドシートを開く
Sub Sample2() '***XMLスプレッドシートを開く*** '「Sample_Spreadsheet.xml」を開く Workbooks.OpenXML Filename:=ThisWorkbook.Path _ & "\Sample_Spreadsheet.xml" End Sub
XMLスプレッドシートを開く場合はOpenXMLメソッドを利用します。
構文:Object.OpenXML(FileName,Stylesheets,LoadOption)
ここでは開くだけなので、引数のFileNameのみ指定しています。先程保存したXMLスプレッドシートを開くので、Filename:=ThisWorkbook.Path & “\Sample_Spreadsheet.xml”とすればOKです。
Excelから開くことはできますが、XMLファイルをExcelで編集する場合は以下の機能が制限されますのでご留意ください。
機能 | 制限内容 |
分析機能のトレース矢印 | 保持されない |
グラフ、その他のグラフィックオブジェクト | 保持されない |
グラフ/マクロ/ダイアログシート | 保持されない |
ユーザー設定のビュー | 保持されない |
データの統合 | 参照は保持されない |
描画オブジェクト順(重ね順) | 保持されない |
リスト | リスト機能は失われるが、データは保持される |
アウトライン | 保持されない |
パスワード設定 | パスワード保護されたワークシート、及びブックのデータは保持されない |
シナリオ | 保持されない |
共有ブック情報 | 保持されない |
小計 | 数値と計算は保持されるが、グループ機能/アウトライン機能は保持されない |
ユーザー定義関数の項目 | 保持されない |
VBAプロジェクト | 保持されない |
3.まとめ
ExcelデータをXMLデータとしたい場合に有効なXMLスプレッドシートですが、保存や開くこと自体は記述も少なく簡単にできますので、知っておくと今後活用の幅が広がるものと思います。
後は制限される機能(保持されない)もあるということを覚えておくと、活用する際に役立ちますので、機会があればご検討くださいませ。
以上、【VBA】XMLスプレッドシートとして保存/開く方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo