「このExcelを開いたら、毎回やる作業がある…」
そんなときに便利なのが、Excel起動時(ブックを開いた時)に自動で初期処理を実行するマクロです。
たとえば、次のような作業を自動化できます。
- 入力フォームを初期状態に戻す(入力欄をクリア)
- 当日の日付を自動セットする
- 更新ボタン代わりに集計を実行する
- 必要なシートがなければ作成する
- フィルター・表示倍率などを整える
今回は、初心者でもそのまま使えるWorkbook_Open の基本コードと、実務でよくある初期処理例をまとめて紹介します。
重要:この仕組みは「ThisWorkbook」に書く
起動時に自動実行したい場合、コードを書く場所は標準モジュールではありません。
必ず ThisWorkbook に書きます。
- Alt + F11 でVBE(VBAエディタ)を開く
- 左の「Microsoft Excel Objects」から ThisWorkbook をダブルクリック
- そこにコードを貼り付ける

基本: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 を入れておくのがおすすめです。
動作確認の手順
- コードを貼り付けたら、必ず保存する(.xlsm 推奨)
- Excelを閉じる
- 再度ブックを開く
- 初期処理が自動で動くことを確認する
まとめ:起動時の自動処理で「運用がラクになる」
Excel運用で「毎回やること」が決まっているなら、起動時に自動化するのが効果的です。
- 入力欄の初期化
- 当日の日付セット
- 集計準備
- シートや表示状態の整備
Workbook_Open を使えば、開いた瞬間に準備が整った状態にできます。
ぜひ、定型運用のExcelブックに導入してみてください。


コメント