0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タスクスケジューラでExcelを自動実行する

Posted at

〜データ取得から加工までが終わったエクセルファイルを作るために〜

はじめに

VBAで加工作業が自動化できている場合、完全自動化まではもう間近です。
あとは、Excelを自動で起動し、マクロを開始できるようにするだけ。
タスクスケジューラで定時にExcelを起動すれば、定型処理を無人で実行できます。


全体像・仕組み

Excelをタスクスケジューラで起動し、Workbook_Openイベントで自動的に処理を開始します。
この仕組みにより、決まったタイミングでデータを取り込み・加工し、Excelを閉じるまでを一括で行えます。

処理の流れは次のとおりです。

  • データ取得:決まった命名ルールのファイルを取り込む(VBA/Power Query)
  • データ加工:空白対応などのデータ前処理から集計・加工を自動実行
  • 処理終了:保存・終了までを一連の流れで実施

構築手順・設定

  1. 事前にマクロを用意
    • 自動加工したいマクロを用意します。
    • 自動実行化します:Workbooks.Open
  2. タスクスケジューラでExcelを自動起動
    • 実行プログラム:EXCEL.EXE
    • 引数:"C:\Scripts\auto_run.xlsm"(作成したブックのパス)
    • トリガー:毎日や週次など任意のスケジュールで設定
  3. 動作確認
    • タスクスケジューラからの起動で、マクロが想定通りに動作するかをテストします。
      ※筆者の環境はWindows環境(例:Windows10/Excel2016)です。

※ 実行モードを制御する設定ファイルを使う場合は、以下の記事を参照してください。
👉 Excel自動実行を制御する設定ファイルの作り方(別記事)


タスクスケジューラ設定

Excelを自動で起動させるため、Windows標準の「タスクスケジューラ」を使います。

今回の記事で動作させるCSVやマクロの内容は、巻末の「準備編」で紹介しています。

手順

  1. スタートメニュー → 「タスク スケジューラ」を起動
  2. 右側の「基本タスクの作成...」をクリック
  3. 名前・説明を入力(例:Excel自動実行
  4. トリガー」で実行タイミングを指定(例:毎日 6:00)
  5. 操作」で「プログラムの開始」を選択し、Excelを指定
  6. 「完了」をクリックして登録

設定例

項目 設定内容
タスク名 Excel自動実行
実行タイミング 毎日 6:00
操作 プログラムの開始
プログラム/スクリプト "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
引数(Excelで開くブック) "C:\Users\(中略)\自動実行.xlsm"
実行ユーザー ログオン中のユーザー(デフォルト設定)

自動化・運用の工夫

  • 標準モジュールに処理を集約して保守性を向上
  • 実行ログを出力して動作確認を容易に
  • 出力ファイル名に日時を付与して履歴管理を簡単に

自動実行時の注意点

  • タスクスケジューラ実行後は、Excelが自動で閉じてPCの状態が元に戻るようにします。
  • ポップアップやダイアログで処理が止まらないようにします(MsgBox禁止など)
  • ExcelにはAccessのようなOpen抑止の標準機能がないため、Workbook_Openで制御できる仕組みを入れます。

関連リンク


まとめ・応用

Excelでも「開く→処理→閉じる」の自動化は構築可能です。
特に、前処理部分だけでも自動化しておくことで、後続の集計や分析が格段に効率化されます。
まずは「起動と前処理」を自動化し、段階的に完全自動処理へと拡張できるといいですね。


付録:準備編

準備1.CSVファイルの用意

毎日決まったフォルダに「商品リスト.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 #自動化 #タスクスケジューラ #業務効率化

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?