- ベストアンサー
EXCELでセルの値が変化したときだけにマクロ実行
教えてください。 EXCELのA1セルの値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行したいと思い、以下のマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に打ちました。 そうしたところキーボードからA1セルに1や0を打ち込むとMacro1・Macro2を実行するのですが。A1セルに関数式を入れ自動で1→0・0→1に変化してもMacro1・Macro2が実行されません。この場合どう修正すればMacroが実行されるようになりますか? ※ちなみにA1セルの関数式はある条件を満たしたら1、そうでない時0という式です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target.Value = 0 Then Macro1 End If If Target.Address = "$A$1" And Target.Value = 1 Then Macro2 End If End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >A2セルでも値が1→0に変化したときに 正直言って、簡単と思っていたら、私には、思いのほか難しかったです。たぶん、以下でいけると思います。前のものに上書きしてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Variant Dim r As Range Dim c As Variant On Error GoTo EndLine i = Null Set r = Target.DirectDependents For Each c In Range("A1,A2,A3").Cells If Not Intersect(r, c) Is Nothing Then i = c.Value Exit For End If Next c Application.EnableEvents = False If i = 0 Then Call Macro1 ElseIf i = 1 Then Call Macro2 End If Set r = Nothing EndLine: Application.EnableEvents = True End Sub
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >A1セルに関数式を入れ自動で1→0・0→1に変化しても そういう場合は、DirectPrecedents か、Precedents(参照先のその先にも参照されている場合)プロパティを使います。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Not Intersect(Range("A1").DirectPrecedents, Target) Is Nothing Then If Range("A1").Value = 0 Then Call Macro1 ElseIf Range("A1").Value = 1 Then Call Macro2 End If End If Application.EnableEvents = True End Sub
お礼
解決です、ありがとうございます。追加で質問させてください。(マクロの知識が少ないためすいません) A1セル以外にA2・A3セルでも同条件にてMacroを実行されるようするにはどうすれば良いですか? A1セルの値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行。A2セルでも値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行・・というように。 ※現状はマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に打っています。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Worksheet_Changeで受け取れるのは、入力作業によって変化したセル情報(Target)しか受け取れません。 マクロの先頭に下記の記述をすると少し理解出来るかも知れません。 Msgbox Target.Address 任意のセルの値をチェックするならマクロの中で、Range("A1")の値をチェックする必要があります。 ですが、チェックするだけでは「(今回のイベントで)変化した結果」なのかは解りません。 変化を見るためには、グローバル変数(若しくは不要なセル)に変化前の情報(前回のイベントが実行された時の値)を記憶させて、今回の値と比較する必要があります。
お礼
親切に回答していただき、本当にありがとうございます。 解決です!感謝・感激です! また質問させていただくことがありましたら よろしくおねがいします。