マクロの応用例
今回は簡単なマクロの応用となります。マクロの中にマクロを埋め込む事で、一つのマクロでは出来ないことを行ってみます。
ExcelのWorkSheetを全て取り込む。
前回バッチマクロの説明で複数CSVの取り込みを行いましたが、少し応用すると、複数Excelのすべてのワークシートを取り込む事も可能です。
まず、Excelを取り込むマクロでSheetを変更する方法を解説します。
通常、Excelファイルを入力ツールで取り込む場合Worksheetは「テーブルまたはクエリ」の項目で設定します。対して、コントロールパラメータからの入力をアクションツールで更新する場合、「File -value」で、ExcelのフルパスとWorksheetを同時に扱う必要があります。読み込むExcelファイルとWorksheetを変更する場合、「File -value」を更新します。
次にエクセルのシート名の取得方法です。これは入力ツールで「シート名のリストのみをインポート」を選択することで可能です。
ここまでで、Excelファイルのシートをマクロで取り込むために「c:\〇○○.xlsx|||sheet名」を作成し、バッチマクロを用いることで取り込みが可能な事がわかります。では、複数ファイルを取り込むには? これもバッチマクロでファイル名を変更しながら行えば可能になります。つまり、複数Excelの全Worksheetを取り込むには、バッチマクロを2つ使えば可能になります。
まず最初にExcelファイルを「c:\〇○○.xlsx|||sheet名」の形で指定できるようにマクロを作成します。入力ツールでExcelファイルを指定し、「シート名のリストのみをインポート」を選択します。この時点では取り込まれるデータを確認するとWorkSheet名のみ取り込まれます。Excelファイルのフルパスも取得したいので、入力ツールの「ファイル名をフィールドとして出力」のオプションを「フルパス」で選択します。これでExcelファイルのフルパス情報が取り込まれます。
取り込まれたデータを確認すると「c:\〇○○.xlsx|||<List id Sheet Names>」になってます。<List id Sheet Names>をSheetNamesの値で置換すると「c:\〇○○.xlsx|||sheet名」になります。置換する時の注意点ですが、「サイズ」に注意してください。置換後のデータサイズが置換前の最大サイズを超える場合、その部分は削除されます。
置換が終わりましたら、対象レコードを次のExcel取り込み用マクロのコントロールパネル入力として用います。Excel取り込み用マクロは入力ツールのフルパスをSheet名ごと変更するように設定します。最終的に全体像は下記のようになります。
最初のアクションツールはSheet名リストを取得する為に用いますので、更新する値はシート名を含めたフルパス全文ではなく、Excelファイル名までを「特定の文字列を置き換えします」を選択し、変換することで複数Excelのファイルを選択できるようにします。
最後に作成したマクロにディレクトリツールからのフルパス情報をコントロールパラメータに入力することで、複数Excelの全Worksheetを取り込む事が可能になります。
このようにマクロ一つでは対応できない事でも、マクロの中に別マクロを埋め込む事で様々な処理を作成することができます。
例えば今回は全Worksheetを対象にしましたが、事前に取り込む対象Worksheet名を別のExcelファイルに書き込んでおき、そのファイルを参照しながら、フォルダ内のExcelから複数の特定WorkSheetのみデータを取得するなどが可能になります。また、Worksheetデータを読み込むマクロにデータ加工部分を作成しておけば、複数のExcelから任意のシートのデータを加工しながら取り込む事の出来るマクロが作成できます。このように応用すれば、複数営業所から上がってきたExcelデータなどを纏めてデータ処理を行うマクロも作成可能になります。
マクロはアイデア一つで色々な物が作成できます。皆様も是非作成してみてください。
次回は応用編として、複数CSVを取り込んだマクロを改良し、複数CSVで共通する項目のみ取得するマクロを作成しようと思います。