こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル イベントマクロ Changeイベントを複数作りたい

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub

以下マクロの内容

End Sub

これでセルA1が変わるとイベントマクロが発生しますが
セルB1が変わると別のマクロが発生し
セルC1が変わるとまた別のマクロが発生し…とするには
どうすればよいのですか
単純に並べて書いたらだめみたいだったんですけど

投稿日時 - 2008-04-02 17:15:51

QNo.3916211

すぐに回答ほしいです

質問者が選んだベストアンサー

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
こんな感じでは?

投稿日時 - 2008-04-02 17:38:46

お礼

有難うございます
上手くいきました

投稿日時 - 2008-04-03 10:18:03

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>セル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
でもできる。(コード表現だけの問題だが)
それでは困るケースがありますか。

投稿日時 - 2008-04-02 20:20:29

お礼

有難うございます
上手くいきました

投稿日時 - 2008-04-03 10:19:19

ANo.2

例えば、こんな感じで如何ですか。

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のマクロ文

これ↑では、複数セル同時変更したとき、その中に該当セルがあっても機能しないと思いますが・・・
これでも良い仕様であれば別ですが・・・

投稿日時 - 2008-04-02 19:58:30

お礼

有難うございます
上手くいきました

投稿日時 - 2008-04-03 10:18:37

あなたにオススメの質問