エクセル小僧:Worksheet_Changeマクロを複数のセル範囲の変化に対応させる [コンピューター]
Worksheet_Changeマクロは特殊なマクロで、ワークシートの値が変化したら起動します。
ところが、このブログで紹介したマクロでは1つの領域の変化にしか対応できませんでした。
例えば、
勤務管理表(改)
http://cheese999.blog.so-net.ne.jp/2014-08-31
では、"出社退社"のセル範囲の変化にしか対応できませんでした。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("出社退社")) Is Nothing Then
' 変化が無ければ抜ける
Exit Sub
Else
n = 32 ' 31日の行番号
For i = 2 To n ' 1日から31日まで
|
(作業時間、残業時間、深夜時間の計算)
|
Next i
End If
End Sub
そこで、If文の条件をNotでくるんで逆にすることで、複数のセル範囲の変化に対応できるようにしてみました。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("出社退社")) Is Nothing) Then
' 「出社退社」に変化があったら、以下を実行
|
ElseIf Not (Intersect(Target, Range("計算方法")) Is Nothing) Then
' 「計算方法」に変化があったら、以下を実行
|
End If
End Sub
これで、「出社退社」と「計算方法」の両方のセル範囲の変化に対応できます。
ところが、このブログで紹介したマクロでは1つの領域の変化にしか対応できませんでした。
例えば、
勤務管理表(改)
http://cheese999.blog.so-net.ne.jp/2014-08-31
では、"出社退社"のセル範囲の変化にしか対応できませんでした。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("出社退社")) Is Nothing Then
' 変化が無ければ抜ける
Exit Sub
Else
n = 32 ' 31日の行番号
For i = 2 To n ' 1日から31日まで
|
(作業時間、残業時間、深夜時間の計算)
|
Next i
End If
End Sub
そこで、If文の条件をNotでくるんで逆にすることで、複数のセル範囲の変化に対応できるようにしてみました。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("出社退社")) Is Nothing) Then
' 「出社退社」に変化があったら、以下を実行
|
ElseIf Not (Intersect(Target, Range("計算方法")) Is Nothing) Then
' 「計算方法」に変化があったら、以下を実行
|
End If
End Sub
これで、「出社退社」と「計算方法」の両方のセル範囲の変化に対応できます。
「ヤバイぜ!」 ありがとうございます。[__猫]
by cheese999 (2014-11-29 17:33)