- 締切済み
エクセルVBAに関して
VBAの知識があまりないので教えて頂きたいのですが、セルの内容が変更されたら マクロが実行される Private Sub Worksheet_Change(ByVal Target As Range) というのがあるかと思います。 セルに書かれた関数によって、セルの内容が変化したときにマクロが実行されるVBA関数はあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 セルの内容は、「何によって]変化するかということで、数式かどうかは、あまり関係ないように思います。おそらく、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
こんにちは。 Private Sub Worksheet_Calculate() を使うといいでしょう。
お礼
返事ありがとうございます。 所で一点教えて頂きたいのですが、関数で変更されたセルが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