作成日:2025年04月07日
FileMakerからVBSを利用してExcelテンプレートに流し込む


どうも、にゃん太です
FileMakerからExcelファイルを作成したいという要望は少なくありませんが、標準機能では単純なリスト出力しかできません
今回のメモでは、VBSを利用して定型書式のExcelファイルを作成する方法について書いていきます
FileMakerのデータから資料作成
FileMakerは様々な業務用アプリを作成する事ができます
そうしたアプリを利用しているとデータが蓄積していきますので、そこから資料を作成したくなる事もあるでしょう
その資料ですが、PDF形式でよければレイアウトを組んで作成できます
しかし、作成した資料を加工できる様にExcel形式で欲しいという要望も少なくありません
FileMakerにはExcel出力機能もありますが、残念ながら単純なリスト形式での出力しかできません


これでは、そのまま使用できる資料とはなりません
VBSを利用してテンプレートに流し込む手順を書いていきます
FileMakerからVBSを実行する
FileMakerからVBSを実行するには、「EVENTを送信」スクリプトステップを使用します
動作テストとして、メッセージを表示するだけのVBSを実行してみましょう
VBS実行テスト
# ################################################## # VBSの実行テスト # ################################################## 変数を設定 [$path1; 値: Get ( テンポラリパス )] 変数を設定 [$path2; 値: Middle ( $path1; 2; Length ( $path1 ) - 1 )] # VBSファイルの保存用パス 変数を設定 [$vbs1; 値: $path1 & "test.vbs"] # VBSファイルの実行用パス 変数を設定 [$vbs2; 値: $path2 & "test.vbs"] # VBSファイルの中身の設定 フィールド設定 [VBS::VBS; "MsgBox \"VBSの実行テスト\""] # VBSファイルの中身の設定 フィールド内容のエクスポート [VBS::VBS;「$vbs1」; フォルダを作成:オフ] # VBSの実行 Eventを送信 [「aevt」;「odoc」; $vbs2]

FileMakerからExcelテンプレートに流し込む
では本番です
今度はExcelテンプレートに流し込みます
具体的な手順は次の通りです
- FileMakerからデータを出力する
- VBSを実行してExcelテンプレートを開く
- VBSからExcelマクロを実行する
- マクロで出力したExcelファイルの内容をテンプレートに流し込む
順番に作成していきましょう
FileMakerからデータを出力する
FileMakerのデータを出力します
形式は分かりやすく、Excelファイルとします
また、今回は画像を使用しています
このデータはExcelファイル出力には含められませんので、別に出力します
流込データ出力
# ################################################## # 流込データ出力 # ################################################## 変数を設定 [$path1; 値: Get ( テンポラリパス )] # 流込テキスト 変数を設定 [$XLpath; 値: $path1 & "base.xlsx"] レコードのエクスポート [ダイアログあり:オフ; フォルダを作成:オン;「$XLpath; Unicode (UTF-16)」] # 流込画像 変数を設定 [$IMGpath; 値: $path1 & test::写真] フィールド内容のエクスポート [test::写真;「$IMGpath」; フォルダを作成:オン] # テンプレートファイル 変数を設定 [$IMGpath; 値: $path1 & test::テンプレート] フィールド内容のエクスポート [test::テンプレート;「$TEMPpath」; フォルダを作成:オン]
尚、フィールドのエクスポート順は次の通りとします

Excelテンプレートの作成
次は、先程出力したデータを流し込むテンプレートを作成します
まずはシートをレイアウトを設計します

次にFileMakerから出力したファイルを読み込んで所定のセルに値を流し込むVBAを用意します
VBA
Option Explicit Sub test(XLpath As String, IMGpath As String) Application.ScreenUpdating = False Dim ws As Worksheet Dim wb As Workbook Dim picture As picture Set ws = ThisWorkbook.Worksheets(1) Set wb = Workbooks.Open(XLpath, ReadOnly) Set picture = ws.Pictures.Insert(IMGpath) ws.Cells(4, 5) = wb.Worksheets(1).Cells(2, 1) ws.Cells(6, 5) = wb.Worksheets(1).Cells(2, 2) ws.Cells(8, 5) = wb.Worksheets(1).Cells(2, 3) ws.Cells(10, 5) = wb.Worksheets(1).Cells(2, 4) ws.Cells(12, 5) = wb.Worksheets(1).Cells(2, 5) ws.Cells(14, 5) = wb.Worksheets(1).Cells(2, 6) ws.Cells(20, 5) = wb.Worksheets(1).Cells(2, 7) ws.Cells(29, 5) = wb.Worksheets(1).Cells(2, 8) picture.Left = ws.Cells(4, 17).Left + 1 picture.Top = ws.Cells(4, 17).Top + 1 picture.ShapeRange.Width = ws.Cells(4, 17).Width * 6 - 2 picture.Top = ws.Cells(4, 17).Top + (ws.Cells(4, 17).Height * 8 - picture.ShapeRange.Height - 2) / 2 wb.Close False Application.ScreenUpdating = True End Sub
VBSからVBAを実行
最後は、VBAを実行する処理を作成します
1処理で完結したいので、先程のデータ作成処理を含めます
Excel作成
# ################################################## # Excelテンプレートへの流し込み # ################################################## スクリプト実行 [指定:一覧から;「流込データ出力」; 引数:] 変数を設定 [$path1; 値: Get ( テンポラリパス )] 変数を設定 [$path2; 値: Substitute ( Middle ( $path1; 2; Length ( $path1 ) - 1 ); "/"; "\\" )] # 流し込みテキストの保存場所 変数を設定 [$XLpath; 値: $path2 & test::テンプレート] # プロフィール写真の保存場所 変数を設定 [$IMGpath; 値: $path2 & test::写真] # Excelテンプレートの保存場所 変数を設定 [$tempPath; 値: $path2 & test::テンプレート] # VBSの保存場所(保存用) 変数を設定 [$vbs1; 値: $path1 & "createXL.vbs"] # VBSの保存場所(実行用) 変数を設定 [$vbs2; 値: $path2 & "createXL.vbs"] # VBSファイルの中身の設定 フィールド設定 [VBS::VBS; "Dim Obj" & ¶] フィールド設定 [VBS::VBS; VBS::VBS & "Set Obj = WScript.CreateObject(\"Excel.Application\")" & ¶] フィールド設定 [VBS::VBS; VBS::VBS & "Obj.Visible = True" & ¶] フィールド設定 [VBS::VBS; VBS::VBS & "CreateObject(\"WScript.Shell\").AppActivate Obj.Caption" & ¶] フィールド設定 [VBS::VBS; VBS::VBS & "Obj.Workbooks.Open \"" & $tempPath & "\"" & ¶] フィールド設定 [VBS::VBS; VBS::VBS & "Obj.Application.Run \"createXL\", \"" & $XLpath & "\", \"" & $IMGpath & "\""] # VBSファイルのエクスポート フィールド内容のエクスポート [VBS::VBS;「$vbs1」; フォルダを作成:オン] # VBSの実行 Eventを送信 [「aevt」; 「odoc」; $vbs2]
以上となります
これを実行すれば、無事流し込んだデータが作成されます
保存処理は組み込んでいないので、必要なら保存、不要なら保存せず閉じればプレビューだけで終了となります

サンプルファイル
以上でVBSを利用したExcelファイルの作成処理は終了です
今回作成したファイルを公開していますので、ご興味がありましたらこちらからダウンロードしてご確認ください
とはいえ、ここまで書いておいて何ですが、VBSは廃止される事が発表されています(参考サイト)
現時点でも非推奨となっており、少なくとも長期利用する場合にはVBSでの作成は選択しない方が無難です

以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください