閲覧ありがとうございます<(_ _)>
ココナラでExcel VBA関連で出品しているさべろくと申します。
早速本題です。
Pythonでスクレイピングツール(Web上のデータを取得するツール)を作るかExcel VBAで作るかの判断で、「Excel VBAで作ったものは定期実行ができないが、PythonはできるからPythonで作る」という意見を聞いたので、Excel VBAでもできますよという記事を書こうかなと思いました。
やり方は大きく分けると2通りかなと思います。
※Windows環境について書きます。
[1]. Excel VBA + タスクスケジューラで実行する
これは、Excel VBAのプログラムで「エクセルファイルが開かれたときにマクロが実行されて、実行が終わったらファイルを閉じる」という記述を書く方法です。
具体的には、「ThisWorkbook」モジュールに「Workbook_open」というサブプロシージャを記述すればできます。
開かれたら実行されるExcelを用意して、タスクスケジューラでエクセルファイルを決まった時間に開くだけです。
[2]. VBScript(もしくはバッチファイル) + タスクスケジューラで実行する
これは、VBScriptなど外部ファイルでエクセルを開いて、マクロを実行して、閉じるという方法です。
タスクスケジューラには、上記のVBScriptなどの外部ファイルをセットして実行するだけです。
このように2つのやり方があります。おススメは[2]です。
[1]はエクセルファイルを開いたときに自動でマクロが実行されて閉じるという処理が実行されるため、定期実行じゃないで確認のためにちょっと開こうと思ったときに不便です(ちょっと開いて実行結果を確認しようと思ったのに、開いた瞬間また実行されて閉じられた…ということが起こります)。
回避するには、エクセルを立ち上げて「開く」からファイルを選択して、shiftキーを押しながらファイルを開くとマクロを実行させずに開くことができるのですが、正直めんどうです。
[2]の方法はExcelファイル自体をいじらなくてよく、一回VBScriptやバッチファイルを作ってしまえば使いまわしが効くので便利です。
具体的なコードは、Googleで「excel vba 定期実行 vbscript」で検索すると出てくるので気になった人は是非ググってみてください。
タスクスケジューラの使い方も併せて解説されているサイトが多いので、比較的楽に実装できるかと思います。
以上、Excel VBA(マクロ)も定期実行できるよ という記事でした。
お読みいただきありがとうございました。
Excel VBAで何かございましたら下記サービスをやっております。
気軽にお声がけください。