【Excel VBA】特定の条件でブックを閉じられないようにする方法 (BeforeCloseイベント)

入力フォームや申請書としてExcelファイルを使っている際、「ユーザーが特定のセルへの入力を忘れたまま、ファイルを閉じてしまう」のを防ぎたい、という場面があります。

VBAの**Workbook_BeforeCloseイベントを利用すれば、ブックが閉じられる直前に最終チェックを行い、条件を満たさない場合はクローズ処理をキャンセル**して、ユーザーに入力を促す、といった制御が可能です。

この記事では、この「最後の関所」とも言えるイベントの基本的な使い方を解説します。


目次

【重要】コードを記述する場所

このコードは、ブック全体の動作(今回は「閉じる」)を監視するイベントマクロであるため、ThisWorkbookモジュールに記述する必要があります。

  1. Excelで Alt + F11 キーを押し、VBE(Visual Basic Editor)を開きます。
  2. 画面左側の「プロジェクトエクスプローラー」から、**ThisWorkbook**をダブルクリックします。
  3. 表示された右側の白いコードウィンドウに、以下のコードを貼り付けてください。

完成したVBAコード

以下が、「入力フォーム」シートのセルC5が空欄の場合、ブックを閉じるのをキャンセルするVBAコードです。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    ' 変数を宣言します
    Dim validationSheet As Worksheet
    Dim requiredCell As Range
    
    ' チェック対象のシートとセルを設定
    Set validationSheet = ThisWorkbook.Worksheets("入力フォーム")
    Set requiredCell = validationSheet.Range("C5")

    ' --- 必須項目の入力チェック ---
    ' もしチェック対象のセルが空欄だったら
    If IsEmpty(requiredCell.Value) Then
    
        ' 1. ユーザーにメッセージを表示
        MsgBox "ブックを閉じる前に、セル「" & requiredCell.Address(False, False) & "」に氏名を入力してください。", _
               vbExclamation, _
               "入力が必要です"
        
        ' 2. 対象のシートとセルに移動して入力を促す
        validationSheet.Activate
        requiredCell.Select
        
        ' 3. ブックを閉じる処理をキャンセルする
        Cancel = True
        
    End If

End Sub

コードのポイント解説

① Workbook_BeforeCloseイベント

Private Sub Workbook_BeforeClose(Cancel As Boolean)

この特別なプロシージャは、ユーザーがウィンドウ右上の「×」ボタンをクリックしたり、「ファイル」>「閉じる」を選択したりして、ブックを閉じようとしたまさにその瞬間に、Excelによって自動的に呼び出されます。

② Cancel As Boolean 引数(核心部分)

このイベントが持つ引数Cancelが、処理を中断させるための鍵となります。

  • **Cancel**は、Excelから「このままブックを閉じて良いですか?」という意思表示を受け取るための変数(フラグ)です。
  • イベント開始時点では、Cancelの値はFalse(=閉じても良い)になっています。
  • コードの中で**Cancel = Trueと設定すると、それは「待った!このブックを閉じるのはキャンセルします!」**という命令になり、Excelはクローズ処理を中断します。

③ 条件チェックとユーザーへのフィードバック

If IsEmpty(requiredCell.Value) Then
    MsgBox "..."
    requiredCell.Select
    Cancel = True
End If

If文で必須項目(requiredCell)が空かどうかをチェックし、空であった(条件を満たさなかった)場合にのみ、以下の3つのアクションを実行しています。

  1. MsgBox: なぜ閉じられないのかをユーザーに伝えます。
  2. requiredCell.Select: ユーザーがすぐに入力できるよう、該当セルにカーソルを移動させます。
  3. Cancel = True: ブックが閉じてしまうのを防ぎます。

まとめ

Workbook_BeforeCloseイベントを利用して、ブックが閉じられるのを防ぐ手順は以下の通りです。

  1. **ThisWorkbook**モジュールにWorkbook_BeforeCloseプロシージャを作成する。
  2. プロシージャ内で、ファイルの保存条件(必須項目の入力チェックなど)を**If文で判定**する。
  3. 条件を満たさない場合に、MsgBoxでユーザーに修正を依頼し、最も重要な命令である**Cancel = True**を実行してクローズ処理を中断させる。

この仕組みは、ファイルの運用ルールを徹底させ、記入漏れなどのヒューマンエラーを防ぐための非常に強力なガード機能となります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次