- ベストアンサー
エクセル イベントマクロ Changeイベントを複数作りたい
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$A$1" A1のマクロ文 Case "$B$1" B1のマクロ文 Case "$C$1" C1のマクロ文 ・・・・ End Select End Sub こんな感じでは?
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>セルA1が変わるとイベントマクロが発生しますが >セルB1が変わると別のマクロが発生し >セルC1が変わるとまた別のマクロが発生し 同じ1つのChngeイベントで受けて Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$A$1" MsgBox "A処理実行" Case "$B$1" MsgBox "B処理実行" Case "$C$1" MsgBox "C処理実行 " End Select End Sub のようにセルのアドレスで区別すればよいのでは。 InterceptやCase文を使わず、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "A処理実行" ElseIf Target.Address = "$B$1" Then MsgBox "B処理実行 " Else MsgBox "C処理実行 " End If End Sub でもできる。(コード表現だけの問題だが) それでは困るケースがありますか。
お礼
有難うございます 上手くいきました
- ja7awu
- ベストアンサー率62% (292/464)
例えば、こんな感じで如何ですか。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1")) Is Nothing Then MsgBox "セル A1 が変更になりました。" ' <--- A1変更時の処理 End If If Not Intersect(Target, Range("B1")) Is Nothing Then MsgBox "セル B1 が変更になりました。" ' <--- B1変更時の処理 End If If Not Intersect(Target, Range("C1")) Is Nothing Then MsgBox "セル C1 が変更になりました。" ' <--- C1変更時の処理 End If End Sub > Select Case Target.Address > Case "$A$1" > A1のマクロ文 これ↑では、複数セル同時変更したとき、その中に該当セルがあっても機能しないと思いますが・・・ これでも良い仕様であれば別ですが・・・
お礼
有難うございます 上手くいきました
お礼
有難うございます 上手くいきました