「vba セルの入力チェック」
「EXCEL マクロ 未入力チェック」
といった検索キーワードで、時折アクセスがあります。
セルの入力チェックをVBAから行う方法を探していた方による検索です。
入力チェックを行うタイミングを制御する方法として、Worksheet_Deactivateイベントプロシージャをご紹介します。
入力チェックを行うタイミング
例えば、あるシートのA1セルに必ず何らかのデータを入力する必要があるときに、チェックを行うタイミングはいくつか考えられます。
大きな分類としては、
・ヒトが任意のタイミングでマクロを実行してチェックする
・自動的にチェック処理を実行する
の2つが考えられます。
この記事では、自動的にチェック処理を実行する方法を見ますが、どのタイミングで実行するかを決めなければなりません。
いくつかのタイミングが考えられますが、別のシートが選択されたとき、該当シートがアクティブでなくなるとき、というのが悪くない選択肢だと思います。
入力チェックを行う処理Worksheet_Deactivateイベントプロシージャ
以下のようなWorksheet_Deactivateイベントプロシージャを、シートモジュールに作成しておくと、このシートがアクティブでなくなるときに、A1セルが未入力でないかがチェックされ、未入力ならA1セルが選択され、メッセージが表示されます。If Me.Range("A1").Value = "" Then
Me.Select
Range("A1").Select
MsgBox Me.Name & "シートのA1セルには必ずデータを入力してください。"
End If
End Sub
例えば、プロジェクトエクスプローラーで「Sheet1(Sheet1)」をダブルクリックして表示された、Sheet1シートモジュールに、
下図のように、上記のイベントプロシージャをコピペしてみてください。
すると、Sheet1シートがアクティブでなくなるときに、A1セルにデータが入力されていなければ、
「Sheet1シートのA1セルには必ずデータを入力してください。」
とメッセージが表示されます。
Worksheet_Deactivateイベントプロシージャで行っている処理
イベントプロシージャは、該当するイベントが発生したときに、自動的に実行されるプロシージャです。
上記のプロシージャの場合、Sheet1シートモジュールに書かれているので、Sheet1シートがアクティブでなくなったときに、
Private Sub Worksheet_Deactivate()
Sheet1シートのA1セルの値がチェックされます。
If Me.Range("A1").Value = "" Then
ここで登場するMeキーワードは、Sheet1シートモジュールに書かれているときはSheet1シート自体を表します。
Sheet1シートのA1セルにデータが入力されていないときに、Sheet1シートが選択されてから、
Me.Select
A1セルが選択され、
Range("A1").Select
メッセージが表示されます。
MsgBox Me.Name & "シートのA1セルには必ずデータを入力してください。"
最終更新日時:2019-02-09 12:44
Home » エクセルマクロ・Excel VBAの使い方 » イベントプロシージャ » 入力チェックを行う-Worksheet_Deactivateイベントプロシージャ