〜データ取得から加工までが終わったエクセルファイルを作るために〜
はじめに
VBAで加工作業が自動化できている場合、完全自動化まではもう間近です。
あとは、Excelを自動で起動し、マクロを開始できるようにするだけ。
タスクスケジューラで定時にExcelを起動すれば、定型処理を無人で実行できます。
全体像・仕組み
Excelをタスクスケジューラで起動し、Workbook_Openイベントで自動的に処理を開始します。
この仕組みにより、決まったタイミングでデータを取り込み・加工し、Excelを閉じるまでを一括で行えます。
処理の流れは次のとおりです。
- データ取得:決まった命名ルールのファイルを取り込む(VBA/Power Query)
- データ加工:空白対応などのデータ前処理から集計・加工を自動実行
- 処理終了:保存・終了までを一連の流れで実施
構築手順・設定
- 事前にマクロを用意
- 自動加工したいマクロを用意します。
- 自動実行化します:
Workbooks.Open
-
タスクスケジューラでExcelを自動起動
- 実行プログラム:
EXCEL.EXE - 引数:
"C:\Scripts\auto_run.xlsm"(作成したブックのパス) - トリガー:毎日や週次など任意のスケジュールで設定
- 実行プログラム:
-
動作確認
- タスクスケジューラからの起動で、マクロが想定通りに動作するかをテストします。
※筆者の環境はWindows環境(例:Windows10/Excel2016)です。
- タスクスケジューラからの起動で、マクロが想定通りに動作するかをテストします。
※ 実行モードを制御する設定ファイルを使う場合は、以下の記事を参照してください。
👉 Excel自動実行を制御する設定ファイルの作り方(別記事)
タスクスケジューラ設定
Excelを自動で起動させるため、Windows標準の「タスクスケジューラ」を使います。
今回の記事で動作させるCSVやマクロの内容は、巻末の「準備編」で紹介しています。
手順
- スタートメニュー → 「タスク スケジューラ」を起動
- 右側の「基本タスクの作成...」をクリック
- 名前・説明を入力(例:
Excel自動実行) - 「トリガー」で実行タイミングを指定(例:毎日 6:00)
- 「操作」で「プログラムの開始」を選択し、Excelを指定
- 「完了」をクリックして登録
設定例
| 項目 | 設定内容 |
|---|---|
| タスク名 | Excel自動実行 |
| 実行タイミング | 毎日 6:00 |
| 操作 | プログラムの開始 |
| プログラム/スクリプト | "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" |
| 引数(Excelで開くブック) | "C:\Users\(中略)\自動実行.xlsm" |
| 実行ユーザー | ログオン中のユーザー(デフォルト設定) |
自動化・運用の工夫
- 標準モジュールに処理を集約して保守性を向上
- 実行ログを出力して動作確認を容易に
- 出力ファイル名に日時を付与して履歴管理を簡単に
自動実行時の注意点
- タスクスケジューラ実行後は、Excelが自動で閉じてPCの状態が元に戻るようにします。
- ポップアップやダイアログで処理が止まらないようにします(MsgBox禁止など)
- ExcelにはAccessのようなOpen抑止の標準機能がないため、
Workbook_Openで制御できる仕組みを入れます。
関連リンク
- 設定ファイルやPower Queryで環境差分に対応する例:
👉 Power Query × INIファイルでExcel自動化を環境対応させる技
まとめ・応用
Excelでも「開く→処理→閉じる」の自動化は構築可能です。
特に、前処理部分だけでも自動化しておくことで、後続の集計や分析が格段に効率化されます。
まずは「起動と前処理」を自動化し、段階的に完全自動処理へと拡張できるといいですね。
付録:準備編
準備1.CSVファイルの用意
毎日決まったフォルダに「商品リスト.csv」ファイルが自動抽出されるとします。
商品,数量
りんご,2
みかん,1
準備2.自動加工ファイルサンプルの作成
CSVの内容を読み取って、価格列を追加する計算・追加する例とします。
マクロを標準モジュールに用意し、実行時に動作することを確認します
Option Explicit
Const CSV_FOLDER As String = "C:\Users\kenic\Downloads\AI関数テスト\" ' CSVフォルダパス
Const CSV_FILE As String = "購入リスト.csv" ' CSVファイル名
Const TARGET_SHEET As String = "購入リスト" ' 貼り付け先シート名
'===================================================
' S00_Main:メイン制御モジュール
'===================================================
Public Sub S00_Main()
' --- メイン制御 ---
' CSV取込 → 加工 の順に実行
Call S01_CSV取込
Call S02_加工
’ MsgBox "全処理が完了しました。", vbInformation
End Sub
'===================================================
' S01_CSV取込:CSVを読み込み、「購入リスト」シートに貼り付け
'===================================================
Public Sub S01_CSV取込()
Dim wbCsv As Workbook
Dim wsCsv As Worksheet
Dim wsDest As Worksheet
' シートがなければ作成
On Error Resume Next
Set wsDest = ThisWorkbook.Sheets(TARGET_SHEET)
On Error GoTo 0
If wsDest Is Nothing Then
Set wsDest = ThisWorkbook.Sheets.Add
wsDest.Name = TARGET_SHEET
End If
' CSVを開いてコピー
Set wbCsv = Workbooks.Open(CSV_FOLDER & CSV_FILE)
Set wsCsv = wbCsv.Sheets(1)
wsDest.Cells.ClearContents
wsCsv.UsedRange.Copy wsDest.Range("A1")
wbCsv.Close SaveChanges:=False
End Sub
'===================================================
' S02_加工:購入リスト → 結果 にコピーし、C列に価格計算式を追加
'===================================================
Public Sub S02_加工()
Dim wsSrc As Worksheet
Dim wsDest As Worksheet
Dim lastRow As Long
' 元データ(購入リスト)シートを参照
Set wsSrc = ThisWorkbook.Sheets("購入リスト")
' 結果シート(なければ作成)
On Error Resume Next
Set wsDest = ThisWorkbook.Sheets("結果")
On Error GoTo 0
If wsDest Is Nothing Then
Set wsDest = ThisWorkbook.Sheets.Add
wsDest.Name = "結果"
End If
' 購入リストを結果にコピー
wsDest.Cells.ClearContents
wsSrc.UsedRange.Copy wsDest.Range("A1")
' 最終行を取得
lastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row
' C列に見出しと数式を設定
wsDest.Range("C1").Value = "価格"
wsDest.Range("C2:C" & lastRow).Formula = "=B2*100"
End Sub
準備3.起動用マクロ
Thisworkbookに、下記コードを貼付け、エクセルファイルを起動時に動作するようにします
Private Sub Workbook_Open()
' メイン処理を呼び出し
Call S00_Main
' ブックを保存
ThisWorkbook.Save
' Excelアプリケーションを終了
Application.Quit
End Sub
#Excel #VBA #PowerQuery #自動化 #タスクスケジューラ #業務効率化