Private Sub Worksheet_Change(ByVal Target As Range)
'「A1:B2」の場合
If Not Intersect(Target, Range("A1:B2")) Is Nothing Then
MsgBox "実行しました"
End If
End Sub
やってみます。
「A1」の値を変更
「A1:B2」の範囲の「A1」に値を入力してみます。
では、Enterで確定してみます。
値の変更時にマクロを実行できました。
「B2」の値を変更
「A1:B2」の範囲の「B2」に値を入力してみます。
では、Enterで確定してみます。
値の変更時にマクロを実行できました。
「A1:B2」以外の値を変更
「A1:B2」の範囲外に値を入力してみます。
Enterで確定します。
マクロは実行されないです。
実行される範囲を「A1:B2」に限定できました。
とびとびのセル範囲を指定して実行
とびとびのセル範囲を指定して実行できるようにしてみます。
「A1」か「A3」の変更で実行する
「A1」か「A3」の変更で実行するVBAコードです。
Private Sub Worksheet_Change(ByVal Target As Range)
'「A1」と「A3」のセル範囲を結合
Dim A
Set A = Union(Range("A1"), Range("A3"))
'「A1」もしくは「A3」の場合
If Not Intersect(Target, A) Is Nothing Then
MsgBox "実行しました"
End If
End Sub
セル範囲を「Union」を使って結合するところがポイントです。
「A1」の変更で実行
「A1」に値を入力してみます。
Enterで確定します。
値の変更時にマクロを実行できました。
「A3」の変更で実行
「A3」に値を入力してみます。
Enterで確定します。
値の変更時にマクロを実行できました。
「A1」と「A3」以外は実行されない
「A1とA3」以外に値を入力してみます。
Enterで確定します。
マクロは実行されないです。
実行する範囲を「A1とA3」に限定できました。
ちょっと応用
ちょっと応用で、値の変更時に値を転記というのをやってみます。
値の変更時に値を転記
値の変更時にデータを転記する、というのをやってみます。
値の変更時にデータを転記する
「VLOOUP関数」をVBAで作成するという感じです。
VBAコードは、次のようになります。
Private Sub Worksheet_Change(ByVal Target As Range)
'「E2」の場合
If Not Intersect(Target, Range("E2")) Is Nothing Then
'2~7をループ
For i = 2 To 7
'「Target」と値が一致する場合
If Cells(i, "A") = Target.Value Then
'値を転記
Cells(i, "A").Offset(0, 1).Resize(, 2).Copy Target.Offset(0, 1)
End If
Next
End If
End Sub