【Excel VBA】特定の条件を満たさないと印刷できないように制限する方法 (BeforePrintイベント)

「承認者の名前が入力されていないと印刷させたくない」「特定の日付が入力されるまで、このシートは印刷禁止にしたい」など、Excelファイルに特定のルールを設け、それを満たさない限り印刷できないように制御したい、というニーズは少なくありません。

VBAの**「イベント」**という仕組みを使えば、このような印刷制限を簡単に実現できます。この記事では、印刷直前に自動で実行されるWorkbook_BeforePrintイベントを利用して、印刷をキャンセルする方法を解説します。


目次

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

今回のコードは、ボタンなどをクリックして実行する通常の「標準モジュール」とは異なり、ThisWorkbookモジュールに記述する必要があります。これは、ブック全体の動作(今回は「印刷」)を監視するための特別な場所です。

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

または、コードウィンドウ上部のドロップダウンで、左側を「Workbook」、右側を「BeforePrint」と選択することでも、プロシージャの雛形を自動で作成できます。


完成したVBAコード

以下が、「入力シート」のセルE5に値が入力されていない場合、印刷をキャンセルするVBAコードです。

Private Sub Workbook_BeforePrint(Cancel As Boolean)

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

    ' --- チェック処理 ---
    ' もしチェック対象のセルが空欄だったら
    If IsEmpty(checkCell.Value) Then
    
        ' 1. ユーザーにメッセージを表示
        MsgBox "印刷する前に、セル「" & checkCell.Address(False, False) & "」に承認者名を入力してください。", _
               vbExclamation, _
               "入力エラー"
        
        ' 2. 対象のシートとセルに移動
        targetSheet.Activate
        checkCell.Select
        
        ' 3. 印刷処理をキャンセルする
        Cancel = True
        
    End If

End Sub

コードのポイント解説

① Workbook_BeforePrintイベント

Private Sub Workbook_BeforePrint(Cancel As Boolean)

これは特殊なSubプロシージャで、ユーザーがブック内のいずれかのシートで印刷ボタンを押したり、印刷プレビューを表示しようとしたりした瞬間に、Excelが自動的に呼び出します。

② Cancel As Boolean 引数

このイベントの最も重要な部分が、引数として渡されるCancelです。

  • Cancel は、Excelから「印刷処理を続行しますか?中止しますか?」という状態を伝えられる、特殊な変数(フラグ)です。
  • このイベントが始まった時点では、Cancelの値はFalse(中止しない)になっています。
  • もし、コードの中で**Cancel = Trueと記述すると、それは「この印刷、中止します!」**とExcelに伝える合図になります。この命令を受け取ったExcelは、その後の印刷処理をすべて中断します。

③ 条件分岐とユーザーへの通知

If IsEmpty(checkCell.Value) Then
    ' ...
    Cancel = True
End If

If文を使い、「もし、チェック対象のセルが空欄だったら」という条件分岐を作ります。条件に合致した場合(=入力漏れがあった場合)にのみ、以下の3つの処理を行っています。

  1. MsgBox: ユーザーになぜ印刷できないのか、その理由をメッセージで伝えます。
  2. targetSheet.Activate / checkCell.Select: ユーザーがすぐに入力できるよう、対象のシートを表示し、該当セルを選択状態にします。
  3. Cancel = True: 上記の通り、印刷処理そのものを中止させます。

まとめ

Workbook_BeforePrintイベントを使えば、印刷という行為をトリガーにして、自作のチェック処理を割り込ませることができます。

  1. **ThisWorkbook**モジュールにWorkbook_BeforePrintプロシージャを作成する。
  2. プロシージャ内で、必須項目の入力チェックなどの条件分岐を記述する。
  3. 条件を満たさない場合に、MsgBoxでユーザーに通知し、**Cancel = True**で印刷を中止させる。

この仕組みを利用することで、ファイルの運用ルールを徹底させ、入力ミスや記入漏れのある不完全な状態での書類が出力されるのを防ぐことができます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

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

目次