目次
はじめに
ExcelでVBAを使っていると、特定のセルが選択されたときに処理を実行したいという場面があります。
これまでは1つのセル(例:A1)に対して処理を割り当てていましたが、
今回は「A1からB3までの範囲内のどれかが選択されたら処理を行う」というように、複数セルに対応したいと思い、方法を調べてみました。
実現したいこと
- A1〜B3のいずれかのセルが選択されたら、メッセージを表示する
- 範囲外を選択した場合は、何もしない
使用するイベント:Worksheet_SelectionChange
この処理は、シート上でセルの選択が変更されたときに動くイベントであるWorksheet_SelectionChange(ByVal Target As Range)
を利用します。
実際に使用したコード
以下が今回の目的を実現するVBAコードです。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B3")) Is Nothing Then
MsgBox "入力できません"
End If
End Sub
コードの解説
Worksheet_SelectionChange(ByVal Target As Range)
→ セル選択が変更されたときに自動的に実行されるイベントプロシージャです。Intersect(Target, Range("A1:B3"))
→ 現在選択されているセル(Target)が、指定した範囲(A1〜B3)と重なるかどうかを判定します。If Not ... Is Nothing Then
→ 範囲と交差していれば(=選択されたセルがA1〜B3に含まれていれば)処理を実行します。MsgBox "入力できません"
→ メッセージをポップアップ表示します。
よくある勘違い:1セルずつ指定しようとするケース
私も最初は、以下のような形で条件を組もうとしていました:
If Target.Row = 1 And Target.Column = 1 Then
' A1が選択されたときの処理
End If
この方法では単一セルには対応できても、範囲指定には不向きで、
複数セルやブロック状のセルを対象とする場合には、Intersect
を使うのが適切です。
応用のヒント
- 範囲を
Range("A1:B3")
から他のセルに変更すれば、任意の範囲で処理可能です MsgBox
の代わりに他の処理(警告音や選択キャンセルなど)を入れることもできます- 複数セルを同時に選択した場合にも反応するようになっています
まとめ
Worksheet_SelectionChange
イベントとIntersect
関数を組み合わせることで、
特定のセル範囲が選択された際に自動で処理を実行することが可能になります。
範囲指定のイベント制御は、入力制限や注意喚起などに役立つ便利な仕組みです。
少しでも参考になれば幸いです。