LoginSignup
50
85

More than 5 years have passed since last update.

Excelマクロをバッチから実行する

Posted at

はじめに

Excelのマクロを使ってなんやかんやデータの集計をしたりすることがあると思います。これが定型的な処理で日次とか週次で実行する、あるいはパラメーターを変更して大量のケースを機械的に行う必要がある、というような場合、いちいちExcelファイル開いてパラメーター変えてポチっとマクロのボタン押すってのも面倒なので、自動化したいですよね。
バッチファイルからExcelマクロを実行することができる、ってのが分かったので整理します。何かと応用が利いて便利だと思います。

マクロを実行するVBScript

バッチから...と言いつつ、実はVBScriptです。というのも、VBScriptはよく分からないので、基本バッチを使ってバッチで出来ないところは他の仕組みで補うという方針なもので...

関連記事:
Windowsバッチまとめ
Windowsバッチまとめ 補足: バッチで出来ないことを他の仕組みで補う

以下のようなVBScriptを用意します。

runExcelMacro.vbs
'argument: <ExcelFile> <MacroName>
'ex: "c:\xxx\yyy\zzz.xlsm" Macro1

Dim obj
Set obj=WScript.CreateObject("Excel.Application")

obj.Visible=False
obj.Workbooks.Open WScript.Arguments(0)
obj.Application.Run WScript.Arguments(1)

第一引数にマクロを含むExcelファイル名、第二引数に実行したいマクロ名を指定して、上のVBScriptを実行すると、指定したマクロが実行されます。

次に、以下のような、Macro_Test01というマクロを含むExcelファイルtemplate.xlsmを用意します。

Sub Macro_Test01()
    Dim env_Arg01
    Dim env_Arg02

    env_Arg01 = Environ("Arg01")
    env_Arg02 = Environ("Arg02")

    Range("A1").Value = env_Arg01
    Range("B1").Value = env_Arg02

    ThisWorkbook.Save
    Application.Quit

End Sub

ポイントは以下です。
マクロ実行時に引数を直接渡すのは難しそうだったので、環境変数で値を受け渡しする想定にしています。VBAで環境変数の値を取得するには、Environ()を使います。
処理としては、Arg01, Arg02という環境変数の値を取得して、それぞれA1,B1セルに格納します(サンプルなのでやっている処理に意味は無いです)。本来は、ここに実際に処理したいコードを書きます。
最後に、ThisWorkbook.Saveでファイルを保存し、Application.Quitでアプリケーションを終了します。

このマクロを呼び出すバッチのサンプルを書いてみます。

macro_test.bat
@echo off
setlocal enabledelayedexpansion
cd %~dp0

copy template.xlsm test01.xlsm

set Arg01=aaa
set Arg02=111

runExcelMacro.vbs %~dp0\test01.xlsm Macro_Test01

まず、テンプレートとして作っておいたExcelファイル(マクロ付)をコピーして別名のファイル(test01.xlsm)を作ります。環境変数Arg01, Arg02を設定してから、新しく作ったファイルのマクロをVBScriptにて実行しています。
生成されたtest01.xlsmを開いてみると、指定したArg01, Arg02の値がA1,B1セルに格納されていることが確認できます。

ちなみに、Excelの設定によってはマクロを有効にしているとファイルを保存する際(ThisWorkbook.Saveの際)に、「プライバシーに関する注意: このドキュメントには、マクロ、ActiveX コントロール、XLM 拡張パックの情報、または Web コンポーネントが含まれています。」というようなポップアップが出て、確認を促される場合があります。そうすると「OK」ボタンを押すなどインタラクティブな操作が必要になって自動化の妨げになってしまいます。
このポップアップが出る場合は、以下の情報を参考に、ポップアップを抑止しておくとよいでしょう。

参考:
「プライバシーに関する注意: このドキュメントには、マクロ、ActiveX コントロール、XLM 拡張パックの情報、または Web コンポーネントが含まれています。」と表示される
Excelの"プライバシーに関する注意"の確認ダイアログを黙らせる

50
85
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
85