【VBA】ブックを開いたらマクロを実行するコードの作り方!毎日のルーティーン作業を効率化
毎日エクセルファイルを開いて、決まった作業を手動で繰り返していませんか?
「今日の日付を入力して、特定のシートに移動して、データをクリアして…」このような単純作業は、
VBAの自動実行機能で一瞬で終わらせることが可能
です。
この記事では、ブックを開いた瞬間にマクロが自動実行される仕組みを、VBA初心者でも理解できるよう丁寧に解説します。
「Workbook_Open」と「Auto_Open」の2つの方法から、実際の業務で使える実用的なコード例まで、コピペですぐに使えるサンプル付きで紹介。
月間数時間の作業時間短縮も夢ではありません。面倒な手作業から解放されて、本来の業務に集中できる環境を今すぐ手に入れましょう。
VBAでブックを開いた時にマクロを自動実行する基本知識
VBAでブックを開いた瞬間にマクロを自動実行する機能は、毎日の定型作業を劇的に効率化できる強力な仕組みです。
この自動実行機能を使えば、
手動でマクロボタンを押す手間が一切不要になり、ファイルを開くだけで必要な処理を完了
させることができます。
Excel VBAには主に「Workbook_Open」と「Auto_Open」という2つの自動実行方法があり、それぞれ異なる特徴と使い分けのポイントがあります。
ブック開始時の自動実行が可能な2つの方法の違い
ブック開始時にマクロを自動実行する方法は、Workbook_OpenとAuto_Openの2種類が存在します。
Workbook_Openは新しい標準的な方法で、ThisWorkbookモジュールに記述することでブックのオープン時に確実に設定したマクロを実行する方法です。
一方、Auto_Openは古い方式で標準モジュールに記述しますが、レガシーシステムとの互換性に優れています。
たとえば、
Private Sub Workbook_Open()はExcel 2000以降で推奨される方法で、Sub Auto_Open()はExcel 95時代から使われている伝統的な手法
ということです。
どちらも同じタイミングで実行されますが、記述場所と動作の微妙な違いを理解しておきましょう。
Workbook_OpenとAuto_Openの使い分けのポイント
Workbook_OpenとAuto_Openの使い分けは、開発環境と要件によって決まります。
Workbook_Openは現代的なVBA開発では第一の選択肢となり、オブジェクト指向的なアプローチでエラーハンドリングも容易です。
これに対し、Auto_Openは古いExcelバージョンとの互換性が必要な場合や、複数のブックで同じ処理を共有したい場合に適しています。
たとえば、
Office 365環境でのみ使用するファイルならPrivate Sub Workbook_Open()を選び、Excel 2010以前のバージョンでも動作させる必要があるならSub Auto_Open()を選択
といったイメージです。
また、Workbook_Openはブック固有の処理に、Auto_Openは汎用的な初期化処理に向いているという特徴もあります。
自動実行マクロのメリットと効率化できる作業例
自動実行マクロの最大のメリットは、
人的ミスの削減と作業時間の大幅短縮
です。
毎朝決まった処理を手動で行っていた作業が、ファイルを開くだけで自動化されるため、月間で数時間の時間削減が可能になります。
具体的な効率化例として、
日報ファイルを開いた瞬間に今日の日付を自動入力する処理や、売上データファイルを開いたときに最新のグラフを自動更新する処理、など
が挙げられます。
また、複数シートの表示設定を一括で調整したり、特定のセル範囲を自動選択したりする処理も、ブックOpen時の自動実行で大幅に効率化できます。
これらの自動化により、本来の業務に集中できる時間が確実に増加するでしょう。
Workbook_Openを使った自動実行マクロの作成方法
Workbook_Openを使用した自動実行マクロは、現代的なVBA開発における標準的なアプローチです。
この方法では、ThisWorkbookモジュールにPrivate Sub Workbook_Open()プロシージャを記述することで、ブックを開いた瞬間に指定した処理が自動実行されます。
Workbook_Openイベントは、ワークブックのライフサイクルと密接に連携しており、オブジェクト指向的な設計思想に基づいた安全で確実な自動実行が可能です。
ThisWorkbookモジュールでの基本的なコードの書き方
ThisWorkbookモジュールでのWorkbook_Openコードは、シンプルな構文で強力な自動化を実現できます。
基本的な記述はPrivate Sub Workbook_Open()で始まり、End Subで終わる構造になっています。
ブックを開いたときにメッセージを表示するサンプルコードがこちら
Private Sub Workbook_Open()
MsgBox "おはようございます!今日も一日頑張りましょう!"
End Sub
このコードをThisWorkbookモジュールに記述するだけで、ファイルを開くたびに挨拶メッセージが表示されます。
Privateキーワードを使用することで、このプロシージャがブック内部でのみ有効になり、外部からの誤った呼び出しを防げます。
VBEでWorkbook_Openプロシージャを設定する手順
VBE(Visual Basic Editor)でWorkbook_Openプロシージャを設定する手順をご紹介します。
Alt + F11キー、または「開発タブ」の「Visual Vasic」でVBEを開きます。
プロジェクトエクスプローラーで「ThisWorkbook」をダブルクリックします。
次に、コードウィンドウ上部の左側ドロップダウンで「Workbook」を選択し、右側ドロップダウンで「Open」を選択すると、自動的にPrivate Sub Workbook_Open()のテンプレートが挿入されます。
こんな感じ
この方法により、タイプミスを防ぎながら正確なイベントプロシージャを作成できます。
設定後は必ずCtrl + Sでファイルを保存し、マクロ有効ブック(.xlsm)として保存することが重要です。
実際に使える自動実行マクロのサンプルコード集
実際の業務で使える自動実行マクロのサンプルコードを紹介します。
日付を自動入力するサンプルコードがこちら
Private Sub Workbook_Open()
Worksheets("日報").Range("B2").Value = Date
Worksheets("日報").Range("B3").Value = Time
Worksheets("日報").Select
End Sub
上記のコードは、
ブックを開いた瞬間に「日報」シートのB2セルに今日の日付、B3セルに現在時刻を自動入力し、該当シートをアクティブにする
という内容です。
複数の初期化処理を組み合わせた実用的なコードにすれば、
特定の条件に基づいてシートの表示・非表示を切り替えたり、計算モードを自動で設定したりする
ことが可能です。
Auto_Openを使った起動時自動実行の実装方法
Auto_Openを使用した起動時自動実行は、VBAの伝統的な自動実行方法として長年愛用されています。
この方法では、標準モジュールにSub Auto_Open()プロシージャを記述することで、ブック開始時の自動実行を実現します。
Auto_OpenはWorkbook_Openよりも古い仕様ですが、シンプルな構造と高い互換性により、現在でも多くの場面で活用されています。
特に、複数のブックで共通の初期化処理を行いたい場合や、昔に作成したマクロとの連携が必要な場面では、Auto_Openが積極的に使用されます。
標準モジュールでのAuto_Open設定の詳細手順
標準モジュールでのAuto_Open設定は、正確な手順を踏むことで確実に動作します。
VBEを開いたら、挿入メニューから「標準モジュール」を選択して新しいモジュールを作成。
こんな感じ
作成されたModule1(または任意の名前)に、以下のような基本構文でAuto_Openプロシージャを記述します。
Sub Auto_Open()
MsgBox "ファイルが正常に開かれました!"
Application.ScreenUpdating = False
' ここに初期化処理を記述
Application.ScreenUpdating = True
End Sub
上記のコードでは、
ブックを開くとメッセージボックスを表示させ、画面更新を一時停止する
という内容です。
Auto_Openプロシージャは、Publicアクセス修飾子を省略したデフォルトの状態で記述することが重要で、Privateにすると正常に動作しないので注意が必要です。
関連記事「処理速度を改善する方法」では、画面更新を一時停止するコードの詳しい解説が紹介されています。
Auto_Openの特徴とWorkbook_Openとの動作の違い
Auto_OpenとWorkbook_Openの動作の違いを理解し、運用する環境に適した方法を採用しましょう。
Auto_Openは標準モジュールに記述され、ブック全体に対して実行される特徴があります。
一方、Workbook_Openはブック固有のオブジェクトイベントとして動作し、より厳密なタイミング制御が可能
という違いがあります。
実行順序においては、通常Auto_OpenがWorkbook_Openよりも先に実行されますが、この順序は環境によって変わる可能性があります。
また、Auto_Openは手動でも呼び出し可能な通常のSubプロシージャですが、Workbook_Openはイベントプロシージャのため手動実行はできません。
これらの違いを理解して、目的に応じて適切な方法を選択することが重要です。
ブック開始時の自動実行マクロ実用コード例とカスタマイズ
ブック開始時の自動実行マクロを実用的にカスタマイズすることで、業務の自動化レベルを大幅に向上させることができます。
単純な処理から複雑な条件分岐まで、様々なパターンのコード例を組み合わせることで、業務内容に合わせた自動実行システムの実装が可能です。
実用的なコード例では、エラーハンドリング、条件分岐、複数処理の連携などを含めた包括的なアプローチが重要になります。
特定シートへの自動移動とデータ初期化のコード
特定シートへの自動移動とデータ初期化を組み合わせたコードは、日常業務で最も頻繁に使われる実用的な自動化です。
ブックを開いた瞬間に作業用シートに移動し、必要なデータを初期化するサンプルコードがこちら
Private Sub Workbook_Open()
Dim ws As Worksheet
Set ws = Worksheets("作業シート")
' シートを選択して移動
ws.Select
' データの初期化
ws.Range("A1").Value = "開始日時: " & Now()
ws.Range("B1").Value = Application.UserName
ws.Range("A3:E100").ClearContents
' カーソルを入力開始位置に設定
ws.Range("A3").Select
End Sub
上記のコードは、
指定した「作業シート」をアクティブにしてからA1セルに開始日時、B1セルにユーザー名を自動入力。作業領域(A3セル~E100セル)をクリアし、カーソルをA3セルにセットする
という内容です。
実際の業務では、このような初期化処理が毎日のルーティーンワークを大幅に効率化します。
日付チェックと定期処理を組み合わせた自動化例
日付チェックと定期処理を組み合わせた自動化は、曜日や月末処理などの条件に応じて異なる処理を実行する高度な自動化です。
平日と土日で異なる初期化処理を行うサンプルコードがこちら
Private Sub Workbook_Open()
Dim currentDate As Date
Dim dayOfWeek As Integer
currentDate = Date
dayOfWeek = Weekday(currentDate)
If dayOfWeek = 2 Then ' 月曜日の場合
MsgBox "今週もよろしくお願いします!"
Call WeeklyInitialization
ElseIf dayOfWeek >= 2 And dayOfWeek <= 6 Then ' 平日の場合
Call DailyInitialization
Else ' 土日の場合
MsgBox "お疲れ様です。休日モードで開きます。"
Call WeekendMode
End If
End Sub
上記のコードは、
月曜日にブックを開いた場合、9~10行目のコードを実行。平日にブックを開いた場合、12行目のコードを実行。土、日曜にブックを開いた場合、14~15行目のコードを実行する
という内容です。
応じて適切な初期化処理が自動実行され、業務の流れに合わせた柔軟な自動化が実現できます。
メッセージ表示と条件分岐を含む実践的なコード
メッセージ表示と条件分岐を含む実践的なコードは、ユーザーとのインタラクションを含めた高度な自動化を実現します。
ファイルの最終更新日をチェックして、適切なメッセージと処理を実行するサンプルコードがこちら
Private Sub Workbook_Open()
Dim lastModified As Date
Dim daysSinceModified As Long
Dim response As VbMsgBoxResult
lastModified = FileDateTime(ThisWorkbook.FullName)
daysSinceModified = Date - Int(lastModified)
If daysSinceModified > 7 Then
response = MsgBox("このファイルは" & daysSinceModified & "日前に更新されています。" & vbCrLf & _
"データを最新化しますか?", vbYesNo + vbQuestion, "データ更新確認")
If response = vbYes Then
Call UpdateAllData
MsgBox "データの更新が完了しました。"
End If
Else
Worksheets("メイン").Select
Worksheets("メイン").Range("A1").Select
End If
End Sub
上記のコードは、
ファイルの更新履歴をチェックして、古いデータの場合はユーザーに更新を促す対話的な処理をする
という内容です。
実際の業務では、このような条件分岐と確認処理により、データの整合性を保ちながら効率的な作業が可能になります。
VBA初心者が『ブックを開くとマクロを実行するシステム』を導入する方法
VBAなんて扱ったことないけど、業務内容に合わせた『自動実行システム』を導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、
今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法で導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんな自動実行システムを導入したい」「毎日のルーティーン作業を自動化したい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA ブックを開くとマクロを実行】【VBA マクロ自動実行システム】でネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。