【VBA】セル範囲を選択したときに処理を実行する方法【Worksheet_SelectionChange】

目次

はじめに

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関数を組み合わせることで、
特定のセル範囲が選択された際に自動で処理を実行することが可能になります。
範囲指定のイベント制御は、入力制限や注意喚起などに役立つ便利な仕組みです。

少しでも参考になれば幸いです。

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

この記事を書いた人

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

目次