色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

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

以下マクロの内容

End Sub

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

gooドクター

A 回答 (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
こんな感じでは?
    • good
    • 7
この回答へのお礼

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

お礼日時:2008/04/03 10:18

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

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

お礼日時:2008/04/03 10:19

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



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

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

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

お礼日時:2008/04/03 10:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング