【マクロを指定時間に自動実行】Excelマクロを自動で決まった時間に実行する方法【vbs+タスクスケジューラ】

+IT 清水です。

  「Excelマクロをいつも決まった時間に自動で実行できるようにしたい!」   という質問をいただきました!
みなさんもExcelマクロやVBAでプログラミングしたものを、毎日、毎週、毎月、同じ作業として手動で動かしていることはありませんか?

今回は、一つの端末で完結できるように、設定していきたいと思います。
今回の方法は、 VB Script(VBS) 、タスクスケジューラを使用して実現していきます。

自動で実行したいExcelマクロを準備する

自動で実行したいExcelマクロを準備します。
例えば、日次で売上を分析するマクロだったり、月次で顧客層の分析をするマクロだったり、
  毎日、毎週、毎月同じように発生する作業をマクロ化したものが良いです。 

以下のように、マクロ画面で実行できる状態になっていれば、マクロ名はなんでも大丈夫です。

Excelマクロを実行するVBSを用意する

VB Script(VBS)はVBAのようなプログラミング言語のひとつで 、Windows上で動作する、「Microsoft社」が開発した言語です。
このVBSを使用して、Excelを手動で開かずに、Excelマクロを実行できるようにします。

まずは、VBSファイルを準備します。

1.メモ帳やsakura editor等のテキストエディタを立ち上げます。

2.ファイル→名前を付けて保存を選択します。

3.名前を付けて保存画面で、
  ファイル名を「excel_macro_exec.vbs」※拡張子が「.vbs」となっていれば、ファイル名はなんでも大丈夫です。
  ファイルの種類を「すべてのファイル」
  として、保存します。
  ※ファイルの保存先は自身が分かりやすい場所であればどこでも大丈夫です。今回は「C:\plusit」に保存しました。

4.これでVBSファイルの作成が完了しました。

※VBS ファイルはダブルクリックすると実行されるので、編集するときは必ず右クリック→「編集」もしくは、「プログラムから開く」を選んで、メモ帳やsakura editor等のテキストエディターで編集します。

5.実行するVBSを以下のコードのとおり、プログラミングして保存します。Echoをコメントアウトしているところは、デバッグ時にコメントを外して動作を確認するときに活用ください。

Dim excelApp,macro

file = WScript.Arguments(0)
macro = WScript.Arguments(1)

Set excelApp = CreateObject("Excel.Application")

excelApp.Visible = False        'Excelを非表示にする
excelApp.DisplayAlerts = False  'ポップアップメッセージを非表示にする
excelApp.AutomationSecurity = 1 'マクロを有効にする

'Excelファイルを読み取り専用で開く
excelApp.Workbooks.Open file,3,False

'WScript.Echo "---マクロを実行します---"

'マクロを実行する
excelApp.Run macro

'WScript.Echo "---マクロの実行が完了しました---"

'Excelを終了する
excelApp.Quit

Set excelApp = Nothing

ここまで完了したら、コマンドプロンプトで上記のVBSを使用して、Excelマクロを実行してみます。

1.コマンドプロンプトを開きます。(cmdで検索)

2.コマンドプロンプトに、以下を入力します。※フォルダの場所は、vbsファイルがある場所を指定して下さい。

cd C:\plusit

3.コマンドプロンプトに、以下を入力します。[VBSファイル名] [Excelマクロファイルパス] [マクロ名]
  ※引数の間は、半角スペースを入力します。

excel_macro_exec.vbs "C:\plusit\月次分析.xlsm" "データ集計"

上記実行して問題なく動作することを確認します。
※今回はわかりやすいようにダイアログボックスを表示していますが、実際に自動実行するときは、ダイアログボックス等、手動で操作しなければならないところはプログラムから外しましょう。

タスクスケジューラを設定する

Windowsの機能の一つである、タスクスケジューラを設定していきます。

1.タスクスケジューラを開きます。「タスクスケジューラ」と検索します。

2.タスクがどこにあるかわかりやすいように、新しくフォルダを用意します。

3.タスクを作成します。右クリック→「タスクの作成」を選択します。

3.全般タブの「名前」を設定します。自身が分かりやすい名前にすればOKです。

4.トリガータブを開き、「新規」ボタンを押下します。

5.新しいトリガー画面にて、自動実行するスケジュールを設定します。
  今回は、月次で実行する想定として、毎月1日に実行するように設定します。
  設定:毎月、月:すべての月を選択、日:1を選択します。

開始時間はマクロを実行したい時間を入力します。ここで入力された時間が毎月実行されるようになります。
入力したら、OKボタンを押下します。

6.操作タブを開き、「新規」ボタンを押下します。

7.実行するVBSファイルとマクロファイル、マクロ名を設定します。
  プログラム/スクリプト:VBSファイルパス、引数の追加:マクロファイルパス マクロ名を入力します。
  今回は引数として、「”C:\plusit\月次分析.xlsm” “データ集計”」と設定しています。

8.OKボタンを押下します。

状態が「準備完了」、次回の実行時刻が自身の想定通りになっていればOKです。

以上で設定は完了です。

まとめ

今回は質問のあったことを記事にさせていただきました!
これからもこういった質問を随時受け付けておりますので、お気軽にお問い合わせください。

また、+ITでは、わいわい会という自習会を定期的に開催しています。
最近のことについて雑談される方、 キャリアの相談や技術的な質問をされる方といった、いろんな方にご参加いただいています!

講座を受講される方も、自分で勉強する方も時間を共有するので、一緒に学ぶ仲間も見つかると思います。
興味のある方は、ぜひご参加ください!