• 締切済み

エクセルVBAに関して

VBAの知識があまりないので教えて頂きたいのですが、セルの内容が変更されたら マクロが実行される Private Sub Worksheet_Change(ByVal Target As Range) というのがあるかと思います。 セルに書かれた関数によって、セルの内容が変化したときにマクロが実行されるVBA関数はあるのでしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 セルの内容は、「何によって]変化するかということで、数式かどうかは、あまり関係ないように思います。おそらく、Worksheet_Changeイベントに間違いありません。 例えば、こんな数式が、C5 にあるとします。 =IF(OR(A1>1,B1>1),"○","") この数式が変化した場合のイベントでしたら、A1 か、B1に対してイベントが発生させ、その後、数式の値を取ればよいわけです。 Calculateイベントには、Target などありませんし、すべてのシートにイベントが走ります。 例えば、こんな風でいかがでしょうか? C5 に数式があって、A1か、B1に入力があったときに、イベントが発生します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Range("C5").DirectPrecedents, Target) Is Nothing Then Exit Sub Application.EnableEvents = False  If Range("C5").Value = "○" Then   Range("D5").Value = 1  Else   Range("D5").Value = ""  End If Application.EnableEvents = True End Sub

noname#187541
noname#187541
回答No.1

こんにちは。 Private Sub Worksheet_Calculate() を使うといいでしょう。

behappy07
質問者

お礼

返事ありがとうございます。 所で一点教えて頂きたいのですが、関数で変更されたセルがC列の場合、その変更されたセルの内容が○ななら右隣のセルに1を入力しなさいとしたいのですが、下記の記述では上手くいきません何がいけないのでしょうか? Private Sub Worksheet_Calculate()  If Target.Column = 3 Then If Target.Cells.Value = "○" Then Target.Cells.Offset(, 1) = "1" End If End If End Sub

関連するQ&A