【VBA】プログラム実行タイミング【セル変更時】
こんにちは
今日は特定のセルが変更された場合実行するプログラムを作成してみましょう。
自分の場合スケジュールの欄を作り、その欄の内容が変更された場合、予定一覧を変更するとかそんな感じで使用しますね。
意外と使えるのに使用例が思い浮かばないw
作成方法
今回はシートのほうに作成します。
今回は簡単に変更したセルの行をMsgboxで返すだけのプログラムです。
ただしすべてのセルに対して実行すると鬱陶しいので1~5行目のセルが変更した場合と条件をつけました。
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("1:5")) Is Nothing Then Exit Sub Else MsgBox Target.Row End If End Sub |
1行目:プロシージャの開始
タイトルがWorksheet_Change
引数をByVal Target As Range に設定してください
2行目:条件引数のTargetが1~5行目以外かどうか
3行目:条件にあった場合、プロシージャの終了
4行目:Else
5行目:Targetの行をMsgboxで返す
6行目:If文の終了
7行目:プロシージャの終了
解説
Worksheet_Change(ByVal Target As Range)でワークシートの内容が変更された場合、変数Targetにアクティブセルが代入されます。
Intersectメソッドは
Intersect(セル,セルの範囲)のように作成します。
セルの範囲に指定したセルがあれば、指定したセルを返しますが、セルがなかった場合はNotingとして値を返します。
2行目の If Intersect(Target, Range("1:5")) Is Nothing Thenでは
変更したセルが1~5行にあるかを確認してない場合はプロシージャの終了となっています。
蛇足ですが、この If ~ is Nothing Then の形は If Not ~ is Nothing Then の形に変更できます。
5行目ではTargetがRange型であることを利用して.Rowプロパティを使用しています。
こんな感じですね。
使いどころは多そうなWorksheet_Changeプロシージャを一度は使ってみてはいかがでしょうか?