〖ExcelVBA〗Excel起動時に自動で初期処理を行うマクロ|開いた瞬間に準備完了にする方法

ExcelVBA

「このExcelを開いたら、毎回やる作業がある…」
そんなときに便利なのが、Excel起動時(ブックを開いた時)に自動で初期処理を実行するマクロです。

たとえば、次のような作業を自動化できます。

  • 入力フォームを初期状態に戻す(入力欄をクリア)
  • 当日の日付を自動セットする
  • 更新ボタン代わりに集計を実行する
  • 必要なシートがなければ作成する
  • フィルター・表示倍率などを整える

今回は、初心者でもそのまま使えるWorkbook_Open の基本コードと、実務でよくある初期処理例をまとめて紹介します。


スポンサーリンク
スポンサーリンク

重要:この仕組みは「ThisWorkbook」に書く

起動時に自動実行したい場合、コードを書く場所は標準モジュールではありません。
必ず ThisWorkbook に書きます。

  1. Alt + F11 でVBE(VBAエディタ)を開く
  2. 左の「Microsoft Excel Objects」から ThisWorkbook をダブルクリック
  3. そこにコードを貼り付ける
Excel起動時マクロ エディター

基本:Excel起動時(ブックを開いた時)に自動実行するコード

まずは最小構成です。
このイベント(イベント=特定のタイミングで自動的に動く処理)を使います。

Option Explicit

Private Sub Workbook_Open()

    MsgBox "ブックを開きました。初期処理を開始します。", vbInformation

End Sub

この状態で保存して閉じ、もう一度開くと、メッセージが自動で表示されます。


実務で使える:初期処理をまとめて呼び出すテンプレ(おすすめ)

初期処理が増えると、Workbook_Open に全部書くのは見づらくなります。
そのため、別の処理(Sub)にまとめて呼び出す形がおすすめです。

以下は、ThisWorkbook に書くコードです。

Option Explicit

Private Sub Workbook_Open()

    On Error GoTo ErrHandler

    ' 初期処理をまとめて実行
    Call InitProcess

    Exit Sub

ErrHandler:
    MsgBox "起動時の初期処理でエラーが発生しました。" & vbCrLf & _
           "番号:" & Err.Number & vbCrLf & _
           "内容:" & Err.Description, vbExclamation

End Sub

Private Sub InitProcess()

    ' ここに初期処理を追加していく
    Call ClearInputArea
    Call SetTodayDate
    Call PrepareSheets
    Call SetView

End Sub

続いて、初期処理の中身(各Sub)は標準モジュールに書くと整理しやすいです。
(もちろんThisWorkbookに書いても動きます)


初期処理例①:入力欄をクリアする

例:シート「入力」の B3:B20 を空にします。

Option Explicit

Public Sub ClearInputArea()

    Dim ws As Worksheet
    Set ws = Worksheets("入力")

    ws.Range("B3:B20").ClearContents

End Sub

初期処理例②:当日の日付を自動で入れる

例:シート「入力」の B1 に今日の日付をセットします。

Option Explicit

Public Sub SetTodayDate()

    Dim ws As Worksheet
    Set ws = Worksheets("入力")

    ws.Range("B1").Value = Date
    ws.Range("B1").NumberFormatLocal = "yyyy/m/d"

End Sub

初期処理例③:必要なシートが無ければ作成する

「集計」シートが無ければ作ってから使う、という実務パターンです。

Option Explicit

Public Sub PrepareSheets()

    Dim ws As Worksheet

    If Not SheetExists("集計") Then
        Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
        ws.Name = "集計"
        ws.Range("A1").Value = "集計シートを作成しました"
    End If

End Sub

' シート存在チェック(標準モジュールに置いて使い回しOK)
Public Function SheetExists(ByVal sheetName As String, Optional ByVal wb As Workbook) As Boolean

    Dim tmp As Worksheet

    If wb Is Nothing Then
        Set wb = ThisWorkbook
    End If

    On Error Resume Next
    Set tmp = wb.Worksheets(sheetName)
    On Error GoTo 0

    SheetExists = Not (tmp Is Nothing)

End Function

初期処理例④:表示状態を整える(ズーム・先頭セル・フィルター解除)

「開いた瞬間に見やすい状態」にしておくと、運用が楽になります。

Option Explicit

Public Sub SetView()

    Dim ws As Worksheet
    Set ws = Worksheets("入力")

    ws.Activate

    ' 表示倍率
    ActiveWindow.Zoom = 100

    ' 先頭セルへ
    ws.Range("A1").Select

    ' フィルターが残っていたら解除
    If ws.AutoFilterMode Then
        ws.AutoFilterMode = False
    End If

End Sub

よくある注意点(ここだけは押さえておく)

① マクロを有効化しないと動かない

Workbook_Open はマクロなので、開いたときに「コンテンツの有効化」をしないと動きません。

② EnableEvents をOFFにしたまま閉じると危険

もし他の処理で Application.EnableEvents = False を使っている場合、
戻し忘れがあると Workbook_Open が動かないことがあります。
イベントを止めたら必ず戻す癖をつけてください。

③ エラー時に“安全に終わる”仕組みを入れる

起動時にエラーで止まると、ブックを開けない状態になることがあります。
そのため、記事内テンプレのように On Error GoTo ErrHandler を入れておくのがおすすめです。


動作確認の手順

  1. コードを貼り付けたら、必ず保存する(.xlsm 推奨)
  2. Excelを閉じる
  3. 再度ブックを開く
  4. 初期処理が自動で動くことを確認する

まとめ:起動時の自動処理で「運用がラクになる」

Excel運用で「毎回やること」が決まっているなら、起動時に自動化するのが効果的です。

  • 入力欄の初期化
  • 当日の日付セット
  • 集計準備
  • シートや表示状態の整備

Workbook_Open を使えば、開いた瞬間に準備が整った状態にできます。
ぜひ、定型運用のExcelブックに導入してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました