
Windows定期実行:タスクスケジューラ Python & VBA
1.概要
スクリプトファイルを定期実行したい時には下記があります。
●Windowsユーザー:タスクスケジューラ
●Macユーザー:カレンダー
●クラウドを使用:Github action、HEROKU
今回はWindowsでの定期実行方法を紹介します。
2.タスクスケジューラの使用方法
2-1.タスクスケジューラアプリの起動
Windowsの検索ボックスに"タスクスケジューラ"と入れてアプリを選択。

2-2.基本タスクの作成
操作タブ->基本タスクの作成->必要情報入力


2-3.処理期間を設定
タスクトリガーで期間設定(下記は毎週月曜日の7:00に処理)


2-4.操作・プログラムを指定(Python)
Pythonファイルを定期実行する場合”プログラムの開始”を選択

次にPythonファイルの場所を指定する。説明用は下記の通りです。
※おそらく”開始(オプション)”は何も記載せず、”引数の追加(オプション)”にpythonファイルの絶対パスを記載してもOKのはずです。

実際に書き込むと下記の通り。条件は下記の通り。
●nameのところは各自のユーザー名が記載されています。
●私はAnacondaを使用しているためPython.exeはAnacondaフォルダの中にあります。
●自分のDesktopにScriptという名前のフォルダをつくりpractice.pyというファイルを作成しました。

最後に入力を確認して完了を押すと完成です。

2-5.テスト実行
手動で実行して動作確認も可能です。先ほど作成したタスクの上で右クリックして”実行する”を選択すれば動作確認可能です。

3.VBAスクリプト(Excelマクロ)の定期実行
Excelのマクロを定期実行する場合はスケジューラ以外にVBSファイルを作成する必要があります。
3-1.Excelマクロの用意
まず自分が使用したいマクロを用意します。(下記は適当なマクロ)
[note用マクロ.xlsm]
Sub Testmessage()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
filepath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
MsgBox ThisWorkbook.Path & "\" & fso.GetBaseName(filepath)
End Sub

3-2.VBSファイルの作成
タスクスケジューラではExcelファイルを直接処理せずVBSファイルを経由して処理します。VBSファイルは下記の通りです
●Const WB_PATH = マクロを記載したファイルパス
●Const PROC_NAME = マクロで作成したプロシージャの名前
[VBSファイル]
Const WB_PATH = "C:\Users\ユーザー名\Desktop\note用マクロ.xlsm"
Const PROC_NAME = "Testmessage"
Dim excelApp
Set excelApp = CreateObject("Excel.Application")
With excelApp
.Visible = False
Dim wb
Set wb = .Workbooks.Open(WB_PATH)
.Run wb.Name & "!" & PROC_NAME
.DisplayAlerts = False
wb.Save
wb.Close
End With
excelApp.Quit
なお私はメモ帳でVBSファイルを作成しましたが文字コードがUTF-8のままだと日本語が文字化けしてエラーが発生するためANSIに変えました。

3-3.VBSファイルの手動チェック
VBAファイルをダブルクリックしてマクロ実行出来ることを確認します。

なお実行できない場合は「プログラムから開く」で「Microsoft®Windows Based Script Host」を選択して実行します。

3-4 タスクスケジューラの指定
2-4.以外はすべて同じですが、ファイル選定方法だけ特殊になります。ポイントは2点です。
●プログラム/スクリプト:"C:\Windows\System32\wscript.exe" を指定
●引数の追加(オプション):VBSファイルのパスを指定
※Excelのパスは一切指定しない(VBS側に指定しているため)

以上でPythonスクリプトと同様にExcelマクロも定期実行可能です。
4.別添 エラー対応
4-1.VBSで実行時のExcelファイル名
VBS実行時に下記のようなエラーが発生しました。

原因はExcelファイル名であり特定の文字が使えませんでした。
ググって「"を3つで括る」や「ショートパス使用」など出てきましたがどれも解決には至らなかったためあきらめてファイル名を修正しました。
OK:note用マクロ.xlsm
OK:note用_マクロ.xlsm
NG:note用 マクロ.xlsm 'スペース(全角も半角もダメ)
NG:note用(マクロ).xlsm '括弧など
参考資料
あとがき
マクロの定期実行が結構手間でほしい情報がまとまってなかったため自分で作成しました。