タスクスケジューラを使用して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を実行する方法としては①VBSファイルのみを使用する方法と②VBSファイルとBatファイルを使用する方法の2通りがあります。

私は汎用性と利便性を考慮して①VBSファイルのみを使用する方法をよく使っていますのでこちらを紹介します。

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

  • 〇準備
  • (1)実行したいVBAコードを記載したファイル

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

    (3)VBAを描いたファイル・VBSファイルを同じフォルダに格納する

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

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

    タスクスケジューラでVBSファイルを起動→VBSでVBAが実行されるというフローになります。

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

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

    1.VBSファイルの作成

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

    また、VBSの中でこの格納したフォルダのパスを取得しておくことで使いまわす際に便利なようにしています。

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

  • 〇VBSファイル(ファイル名:01_タスクスケジューラでVBA実行.vbs)
  • Dim ExApp:Set ExApp = CreateObject("Excel.Application")
    Dim FSO:Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim WSH:Set WSH = CreateObject("Wscript.Shell")
    '格納されているフォルダのパスを取得(ExcelVBAで言うところのThisWorkbook.Pathみたいなもの)
    Dim objPath:objPath = FSO.GetParentFolderName(WScript.ScriptFullName)
    
    ExApp.visible = true
    WScript.Sleep 3000
    
    'ファイル開く
    ExApp.Workbooks.open objPath & "\" & "02_タスクスケジューラでVBA実行.xlsm"
    
    'マクロ実行
    ExApp.Application.Run "メッセージ表示"
    
    'ファイルを閉じる
    WScript.Sleep 3000
    ExApp.Quit
    
    set ExApp = Nothing
    set objPath = Nothing
    set WSH = Nothing
    set FSO = Nothing
    
  • 〇VBA(ファイル名:02_タスクスケジューラでVBA実行.xlsm)
  • Sub メッセージ表示()
        MsgBox "実行しました"
    End Sub
    

    VBSファイルをダブルクリックした場合に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

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

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

    vba155-8 vba155-9

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

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

    vba155-11-2

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

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

    コメント