まえがき
blueprismのようなRPAを利用するとVBAマクロもブラウザ操作もスケジュール実行できるのですが、1月10万円とかかかるため、個人では手が出せない代物となります。
そこで、今回紹介するのは、RPAの下位互換的な利用が無料でできる方法となります。
概要を説明すると、①タスクスケジューラで②バッチ(.bat)を実行させて、②バッチから③シェルスクリプト(vbs)を起動させ、③シェルスクリプト(vbs)でVBAを起動させる方法です。
VBAを実行する事で、外部データを使ったExcelファイルのデータ処理、メールの送付、ファイルの暗号化ZIP、簡単なWEB操作など、幅広い業務を自動化できます。
私も業務の自動化プロジェクトに参加した経験がありますが、ほぼすべての実績はVBAを使ったデータ処理が中心でした。
難しそうに思われるかもしれませんが、本ページの内容を、実行時間、バッチ名、マクロ名など一部書き換えるだけで、簡単に使えますので、ぜひご活用下さい。
シェルスクリプトの作成
テキストに以下内容を記載して「execMacro.vbs」として[Windows>System32]直下に保存します。※貼り付けすると”が全角になるのでご自身で半角に入力し直してください。
既に作成したものがありますので、こちらをクリックしてダウンロードしても良いです。
Dim excelApp : Set excelApp = CreateObject(“Excel.Application”)
‘ Excelを非表示にする
excelApp.Visible = False
Dim targetFile : targetFile = WScript.Arguments(0)
Dim targetMacro : targetMacro = WScript.Arguments(1)
‘ Excelファイルを開く
excelApp.Workbooks.Open targetFile
‘ マクロの実行
excelApp.Run targetMacro
‘ Excelの終了
excelApp.Quit
BATの作成
以下のように「VBAのファイルのパス」と「実行するマクロ名」を入力して「execMacro.bat」
として[Windows>System32]直下に保存します。
cscript execMacro.vbs “Excelファイルのフルパス” “実行するマクロ名”
例えば、ファイル名が「マクロファイル_20211227.xlsm」でマクロ名が「データ抽出マクロ」の場合は以下のようになります。
※貼り付けすると”が全角になるのでご自身で半角に入力し直してください。
※うまく動作しない場合は[pause 100]などで画面を停止してメッセージを確認してください。
cscript execMacro.vbs “C:\Users\user01\Desktop\aaa\マクロファイル_20211227.xlsm” “データ抽出マクロ”
VBAの保存設定の変更
マクロが設定されたExcelファイルによっては処理後に、「変更を保存しますか?」というメッセージが出る場合があります。
エラーメッセージが出る場合は、必要に応じて、以下のようにVBAマクロを設定して問題を回避してください。
ファイルが変更されていなければ閉じる
Sub Auto_Close()
ThisWorkbook.Saved = True
End Sub
保存しないでファイルを閉じる(推奨)
Sub Auto_Close()
Workbook.Close SaveChanges:=False
End Sub
保存してファイルを閉じる
Sub Auto_Close()
Workbook.Close SaveChanges:=True
End Sub
タスクスケジューラの設定
ここまでできれば、あとはタスクスケジューラでbatを実行させるスケジュールを入れるだけです。
Windowsでタスクスケジューラを起動するにはメニューバーで「タスクスケジューラ」と入力して、タスクスケジューラをクリックします。
タスクスケジューラを起動してタスクの作成をクリックします。
名前は任意で大丈夫です。仮に[VBA自動起動01]とします。権限で実行エラーとならないように最上位の権限で実行するにチェックを入れます。
トリガーのタブを選択して、新規をクリックします。
ここでは実行させる日時を指定します。仮に毎日3:00に実行することとします。
毎日にチェックを入れて、開始の時間のところを3:00に合わせます。日付はそのままで問題無いです。
次に操作タブで新規をクリックします。
ここで実行するbatを指定します。参照ボタンを押して「execMacro.bat」を選択してします。
OKを押して閉じます。
条件と設定は初期値のままでOKで閉じます。※うまく動作しない場合は、後で修正可能です。
タスクスケジューラライブラリをクリックして、先ほど作成したタスクが設定されている事を確認します。
想定通り動作する事を確認するために、手動で実行してみます。作成したタスクを右クリックして、実行するをクリックします。
問題なく稼働した場合は、設定は完了です。
タスクスケジューラは実行環境によって、調整が必要な場合があります。
正常に動作しなかった場合や、次回のスケジュール時刻に想定通り動作しなかった場合は、下記サイトを参考に設定を修正してみて下さい。
【Windows/タスクスケジューラ】バッチを実行する際の3つの注意点 (teamxeppet.com)
あとがき
VBAの自動実行はマクロの有効化などの認証制限があるので、特殊なRPAツールを用いないとできないとあきらめていたので、こんなに簡単に実行できたことは衝撃でした。逆に考えるとクリックしただけで、色々な操作をされるリスクを十分理解して、業務を行う必要があると、改めて認識しました。
VBAを自動実行できるようになると、Teratermマクロやシェルスクリプトを実行するためのデータ処理やコマンドの作成など、更に人間に近い複雑な処理を行う事ができ、WEB操作はPythonなどの上位互換のものがあり、VBA以外はコマンド実行できるものが多いので、多くの作業を自動化できる可能性があります。
ここからのあとがきは、完全に雑談なので、読み飛ばして貰って結構です。
最近流行りのAIでは自動学習というものがありますが、要は条件分岐の最適化をしているだけであり、人間がやっている作業も知識や経験に基づいて、最適な条件分岐をしているだけです。
また、どれだけ押されても転ばないロボットや、荷物を運ぶためのドローン、自動で人を運ぶ無人タクシーなど、大きな枠でのロボットが進化し続けています。
これと今回紹介した自動化の仕組みが組み合わされる事で、機械が人に代わって、仕事をしてくれるユートピアの実現も不可能では無いと考えています。
ただ、最近よく思う事は、便利なものに依存していると予期せぬトラブルで大きなしっぺ返しを食らう事があります。具体例を挙げると、玄関の指紋認証を使っていて、気が付かない間に電池が切れていて、鍵を持っていないとなった場合は家に入れなくなります。
そういった意味でも、根本的な知識の継承や、アナログでの回避手段も備えた上で、便利な技術を利用して、より人間が幸せに暮らせれる世の中になれば良いと思います。