タスクスケジューラを使用してVBA(マクロ)を自動実行する方法

スポンサーリンク

決まった時間に実行することが決まっているVBAの完全自動化を目指す

今回はタスクスケジューラを用いて定期的にVBAを自動実行する方法についてご紹介します。

最初だけ設定・準備が少し面倒ですが、これを設定しておくことで面倒な操作を完全自動化することができるようになります。

ダブルクリックだけでVBAは実行できるので特に時短にならないのでは?と思う方もいるかと思いますが、このタスクスケジューラを用いての自動実行については完全自動化による「作業忘れの防止」と「頻回の操作」を目的としています。

例えば私が実際に使っているものとしては「1週間に1回あるサービスの利用状況を集計してメールで報告する」や「同僚のスケジュールを毎日全員に送信する」というような処理が完全に自動化されます。

処理にかかる時間がVBAを手動で実行したとして1週間に1回10分・毎日1回5分であったとしても、他にやらなければならないことがあったりするとつい忘れることもあると思います。

またこの小さな作業が積み重なるとそこそこ時間がとられることになります。
完全自動化することにより、まず作業忘れを完全になくすことが可能です。

さらに作業時間が0なので「毎日1時間おきに作業する」や、「1か月のうち1日だけの作業」などもあらかじめ登録しておけば手間も負担も全くありません。
以上のことから手作業でVBAを実行する自動化のレベルとは明らかに1ランク上の自動化が可能になります。

タスクスケジューラについて

タスクスケジューラはWindowsに標準の機能で、実行するための条件(トリガー)と実行内容(操作)を設定しておくことで、条件を満たした場合に特定の操作を行うことが可能です。

主にアプリケーションのアップデートの確認などに使用することが多いようですが、我々もこの機能を活用して自動処理の仕組みを作ることが可能です。

実行内容はBatファイルを開くという操作を指定しておくのが最も手間がかからないらしく、VBAを実行するためにはBatファイルとVBSファイルを用意して順に実行するというフローを使うことが多いようです。(詳細の手順は後で示します。)

スポンサーリンク

タスクスケジューラでVBAを実行する手順の概要

タスクスケジューラを用いた場合、ダイレクトでVBAを実行せず、下記の準備と手順で実行するのが一般的なようです。
(もしかしたら方法はあるのかもしれませんが、私が調べた限り見つかりませんでした。)

  • 準備
  • (1)VBAを実行するためのVBSファイル

    (2)VBSを実行するためのBatファイル

  • 手順
  • ①タスクスケジューラでBatファイルを起動

    ②Batファイルに記載されたVBSファイルを実行

    ③VBSファイルでVBAを実行する

    Batファイルはコマンドプロンプトの操作を自動化するためのファイルですが、ここでは詳細は省略します。

    ファイルを起動するコードさえ記入できれば大丈夫なので、詳しくわからなくても大丈夫です。
    タスクスケジューラでBatファイルを起動→起動されたBatファイルによってVBSが起動→VBSでVBAが実行されるというフローになります。

    少し準備に面倒な気もしますが、①タスクスケジューラで実行するのにBatファイルは条件設定が簡単なこと、②VBAを実行するにはVBSが簡単なことがこのフローを使う理由のようです。

    前回VBSを用いてVBAをダブルクリックで実行する方法をご紹介しましたが、VBSを用いてダブルクリックする方法は単体ではそこまで便利ではなく、今回ご紹介するタスクスケジューラを用いた自動実行と組み合わせて初めて本領を発揮します。

    タスクスケジューラでVBAを実行する設定方法

    1.BatファイルとVBSファイルの作成

    先ほど概要をご説明した通り、VBAのコードを書いたファイルのほか、batファイルとVBSファイルを作成してbatファイル→VBS起動→VBA実行のフローを構築します。

    私はこの流れを作るときややこしくならないように一つのフォルダにすべて格納して実行することが多いです。
    (共通で使うものなどの場合は共有フォルダなどを使用するため例外的に別に保存しています。)

    batファイルとVBSファイルはテキストエディタなどでコードを書いた後、拡張子をそれぞれ「.bat」「.vbs」に変更すればOKです。
    今回例として下記の3つのファイルを作成して、デスクトップの「タスクスケジューラ」というフォルダに格納しています。

    vba155-1

  • batファイル(ファイル名:01_タスクスケジューラでVBA実行.bat)
  • START C:\Users\(ユーザー名)\Desktop\タスクスケジューラ\02_タスクスケジューラでVBA実行.vbs

  • VBSファイル(ファイル名:02_タスクスケジューラでVBA実行.vbs)
  • Dim ExApp
    Set ExApp = CreateObject(“Excel.Application”)

    ’ファイル開く
    ExApp.visible = true
    ExApp.Workbooks.Open “C:\Users\(ユーザー名)\Desktop\タスクスケジューラ\03_タスクスケジューラでVBA実行.xlsm”
    WScript.Sleep 1000

    ’マクロ実行
    ExApp.Application.Run “メッセージ表示”
    WScript.Sleep 1000

    ’ファイル閉じる
    ExApp.Quit
    set ExApp = Nothing

  • VBAファイル(ファイル名:03_タスクスケジューラでVBA実行.xlsm)
  • Sub メッセージ表示()

    MsgBox “実行しました”

    End Sub

    この3つのファイルを準備した段階で、VBSファイルをダブルクリックした場合とbatファイルをダブルクリックした場合、いずれの場合もExcelファイルが起動し、マクロが実行できればOKです。

    今回の場合メッセージボックスが表示されるのでOKをクリックすると作業が次に進み、ファイルが閉じる仕様となります。

    2.タスクスケジューラの設定

    上記3つのファイルが作成できて、手動できちんと動作することが確認できたらタスクスケジューラでBatファイルを起動する準備をしていきます。

  • ①「Windowsマーク」→「Windows管理ツール」→「タスクスケジューラ」を選択します。
  • vba155-2

  • ②起動したタスクスケジューラの画面で「タスクの作成」をクリックします。
  • vba155-3

  • ③全般タブでタスクの名前を入力します。(名前は自分で覚えやすい名前でOK)
  • vba155-4 vba155-5

  • ④「トリガータブ」で「新規タブ」をクリックして起動の条件を設定します。
  • 今回は1時間に1回毎日実行するように設定してみます。
    設定項目の左側を毎日に指定、詳細設定の繰り返し間隔を1時間に設定してOKをクリックします。

    vba155-6 vba155-7

  • ⑤前の画面に戻るので「操作タブ」で「新規」をクリックして起動するプログラムを選択します。
  • プログラム/スクリプトの欄に作成したbatファイルのフルパスを入力します。
    「参照」ボタンをクリックしてファイルを選択すれば入力されます。

    また、開始(オプション)に格納されているフォルダのパスを入力します。
    詳しくは私も把握していませんが、これを忘れると起動しないので、忘れずに入力するようにしましょう。

    vba155-8 vba155-9

  • ⑥元の画面に戻るので「OK」をクリックします。
  • vba155-10

  • ⑦タスクスケジューラの一覧に作成したタスクが表示されます。
  • 右の実行ボタンをクリックしてきちんと起動すれば決まったタイミングから自動実行が開始されます。

    vba155-11-2

    これらのファイルは一回作っておくとあとはコピペをベースに少し設定を変更すればすぐに使えるようになるので、慣れてくると簡単に作れるようになります。

    最初の設定だけ少し面倒ですが、そのあと勝手に仕事が進むので私はかなり重宝しています。
    また便利な使い方など思いついたらアップするようにします。

    コメント