Workbook_OpenとWorkbook_BeforeCloseの使い方!Excel起動・終了時の処理を完全自動化
生徒
「エクセルを開いた瞬間に、自動的に今日のデータを取り込んだり、挨拶を表示させたりすることはできますか?」
先生
「もちろんできますよ!VBAには『Workbook_Open(ワークブック・オープン)』という、ファイルが開いた時にだけ動く特別な命令があるんです。」
生徒
「それなら、ファイルを閉じる時に『保存し忘れ』をチェックすることもできますか?」
先生
「その通り!それは『Workbook_BeforeClose(ワークブック・ビフォア・クローズ)』を使えば実現できます。起動時と終了時の自動化をマスターしましょう!」
1. Workbook_Openとは?エクセル起動時の自動実行
Excel VBAの Workbook_Open は、そのエクセルファイル(ブック)がダブルクリックされて開かれた瞬間に、自動的にプログラムを実行させる機能です。専門用語でこれを「イベントプロシージャ」と呼びます。「イベント」とは「ファイルが開いた」という出来事のことで、「プロシージャ」は「プログラムのまとまり」のことです。
例えば、朝一番にエクセルを開いた時、自動的に「特定のシート」が表示されるようにしたり、「今日の日付」を特定のセルに入力させたりすることができます。パソコンに詳しくない人でも、ファイルを開くだけで勝手に準備が整うようになるため、事務作業の効率が劇的にアップします。まるで、お店を開けた瞬間に自動で照明がつき、開店準備が整うようなイメージです。
2. プログラムを書く場所は「ThisWorkbook」!
ここで初心者が一番間違いやすいポイントを解説します。通常のVBAプログラムは「標準モジュール」という場所に書きますが、今回のような「ファイルが開いた時」の命令は、必ず ThisWorkbook(ディス・ワークブック) という場所に書かなければなりません。
VBAの編集画面(VBE)を開くと、左側に「プロジェクトエクスプローラー」という木のような図があります。そこにある「ThisWorkbook」をダブルクリックして開いてください。ここに書かないと、どんなに正しいプログラムを書いても、ファイルを開いた時に反応してくれません。これは「このファイル自身のルール」として登録するための特別な場所だからです。パソコンを初めて触る方は、まずこの「場所」を間違えないように注意しましょう。
3. 【実践】開いた時にメッセージを表示する簡単なコード
まずは一番シンプルな例として、ファイルが開いた時に挨拶をするプログラムを作ってみましょう。以下のコードを「ThisWorkbook」の中にコピーして貼り付けてみてください。
Private Sub Workbook_Open()
' ファイルが開いた時にメッセージボックスを表示します
MsgBox "おはようございます!今日も一日頑張りましょう。"
' Sheet1のA1セルに今日の日付を入れます
Worksheets("Sheet1").Range("A1").Value = Date
End Sub
このプログラムを実行するには、一度ファイルを保存して閉じ、もう一度開き直す必要があります。すると、画面にメッセージが表示され、自動的に日付が入力されます。
(画面に「おはようございます!今日も一日頑張りましょう。」という箱が表示されます)
4. Workbook_BeforeCloseとは?終了時の処理
次に、ファイルを閉じる直前に動く Workbook_BeforeClose について解説します。これは、右上の「×」ボタンを押したり、「閉じる」を選択したりした瞬間に、実際にファイルが閉じるよりも「一歩手前」で動く命令です。名前の通り「閉じる(Close)の前(Before)」という意味ですね。
これを使うと、例えば「入力必須のセルが空欄のままなら、閉じるのを中断させる」といった、おせっかいだけど親切な機能が作れます。また、作業ログを残したり、自動的に特定のバックアップを作成したりする設計も可能です。設計のコツは、ユーザーが「あ、忘れてた!」と思うことを、パソコンに先回りして確認させることです。
5. 【実践】閉じるときに自動保存させる便利なコード
「保存するのを忘れて作業が消えてしまった」という悲劇を防ぐために、ファイルを閉じる時に必ず自動で保存させるプログラムを作ってみましょう。これも「ThisWorkbook」に記述します。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' 閉じる前に自分自身を上書き保存します
ThisWorkbook.Save
' 保存完了を知らせるメッセージ
MsgBox "上書き保存をしてから終了します。お疲れ様でした!"
End Sub
ここで Cancel As Boolean という難しい言葉が出てきますが、これは「閉じるのをやめる(キャンセルする)」ためのスイッチです。今は深く考えなくて大丈夫ですが、これを使うことで、特定の条件を満たさない場合に「閉じるのを禁止する」という高度なこともできるようになります。
(画面に「上書き保存をしてから終了します。お疲れ様でした!」と表示されます)
6. 特定のシートを必ず最初に表示する設計術
複数人でエクセルを共有していると、「前回保存した時のシート」がバラバラで、次に開く人が困ることがあります。これを解決するのが、起動時に「メニュー画面」や「最新月のシート」を強制的に表示させる設計です。プログラミング未経験でも、たった数行でプロのような気遣いができるようになります。
Private Sub Workbook_Open()
' 「メイン」という名前のシートを一番手前に表示させます
' Activate(アクティベート)は「選択する」という意味です
Worksheets("メイン").Activate
' 画面を一番上のA1セルに移動させます
Range("A1").Select
End Sub
この一工夫で、次にこのファイルを使う人は必ず「メイン」シートから作業を始めることができます。データの整理整頓には欠かせないテクニックです。
7. 入力漏れをチェックして「閉じるのを中止」する方法
前述の Cancel というスイッチを使って、実用的な「入力漏れチェック」を作ってみましょう。例えば、A1セルが空っぽのままだと、絶対にファイルを閉じさせないという厳しいルールを作ることができます。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' A1セルが空白("")かどうかを確認します
If Range("A1").Value = "" Then
MsgBox "A1セルが未入力です!入力してから閉じてください。"
' CancelをTrueにすると、エクセルが閉じるのをやめてくれます
Cancel = True
End If
End Sub
If(イフ)は「もし~なら」という意味で、条件によって動きを変える命令です。条件が満たされた時に Cancel = True とすることで、×ボタンを押してもファイルが閉じなくなります。入力ミスを物理的に防ぐ究極の方法です。
8. 注意点:マクロを有効にしないと動かない!
これらの自動実行プログラムは、非常に便利ですが、大きな注意点があります。それは、エクセルを開いた時に「マクロを有効にする」というボタン(セキュリティ警告)を押さないと、一切動かないということです。どんなに完璧なプログラムを書いても、このセキュリティの壁を突破しない限り、パソコンは勝手に動くことを許可してくれません。
また、ファイルの保存形式は必ず「エクセル マクロ有効ブック(.xlsm)」にしてください。普通の形式(.xlsx)で保存すると、苦労して書いたVBAのコードがすべて消えてしまいます。パソコンを初めて触る方は、ファイルを保存する時に「ファイルの種類」をよく確認し、マクロが含まれていることを忘れないようにしましょう。この2点さえ守れば、あなたのエクセルは世界一賢いパートナーに変わります。
9. 起動・終了時の自動化を組み合わせるメリット
Workbook_Open と Workbook_BeforeClose を組み合わせることで、一日の作業の流れを完全にコントロールできます。例えば、起動時に「サーバーから最新在庫を取得」し、終了時に「日報を自動作成して上書き保存」するという一連の流れを作れば、人間はデータの入力だけに集中できます。
VBAの学習において、こうした「自動で動くきっかけ」を理解することは、単なる計算以上に価値があります。最初は「挨拶を表示する」だけでも構いません。自分の書いた命令が、決まったタイミングで正確に実行される感動をぜひ味わってください。それが、さらに便利なプログラムを作るための第一歩となります。一つ一つの用語は難しいかもしれませんが、今回紹介したコードを真似することから始めてみましょう!