- ベストアンサー
マクロ実行する条件について教えてください
- マクロを実行する条件について教えてください。
- 数式によってセルの値が変化する場合は、どのようなマクロを使用すれば良いでしょうか?
- マクロを使用して、セルの値が変化した際に特定の処理を実行する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
方法1: ご相談の意図に沿ったものを作ると,次のようになります。 Private Sub Worksheet_Change(ByVal Target As Range) With Worksheets("食品一覧") ’この行は使えないので削除する ’If Intersect(Target, Range("V5:V10000")) Is Nothing Then Exit Sub ’以下は今までのまま使う Application.EnableEvents = False Worksheets("賞味期限切れ").Range("A7:Z10000").Clear Worksheets("その他").Range("A7:Z10000").Clear .Range("A4:Z1000").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("賞味期限切れ").Range("A1:A2"), _ CopyToRange:=Worksheets("賞味期限切れ").Range("A6:G6"), _ Unique:=False .Range("A4:Z1000").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("その他").Range("A1:A2"), _ CopyToRange:=Worksheets("その他").Range("A6:G6"), _ Unique:=False Application.EnableEvents = True End With End Sub この方向性で,これ以上出来る事はありません。正直あまり使い良くはありません。 方法2: 別のやり方を考えてみると。 >V列に数式を入力し、計算によってV列の値に変化があった時にマクロを実行する >↓入力する数式は以下の数式です。 =IF(DATE(YEAR(A10),MONTH(A10),DAY(A10))<$A$1,"期限切れ","その他") この式は,A10セル(若しくはA1)にあなたが何かを入力すると,再計算されます。 もしかするとA10にも式が入っているのかも知れませんが,それならそのA10も,さらに上流のどこかのセルに入力されて動き始めます。 つまり「再計算が走る」ためには,通常はその上流に位置する「このセルに入力」する事で計算チェインが動き始める"引き金のセル"があります。 従って, 変更前: >"食品一覧"シートのV列の値が変わったら 変更後: →V列の式が計算に使っている上流側のA列のセルに入力をしたら 変更後マクロ: Private Sub Worksheet_Change(ByVal Target As Range) With Worksheets("食品一覧") If Intersect(Target, Range("A1:A10000")) Is Nothing Then Exit Sub ’以下は現行のまま のようになります。
お礼
早速のご回答ありがとうございました! >もしかするとA10にも式が入っているのかも知れませんが,それならそのA10も,さらに上流のどこかのセルに入力されて動き始めます。 上流のセル(A10)には、=TODAY()が入っています。 説明が難しく、分かりにくいものになってしまうので省略させていただきますが、ご回答頂いた内容を参考に、結局ブックOPEN時に実行するマクロと、手入力した時に実行するマクロの2種類のマクロを使うことにしました。 下手な説明にもかかわらず、ご理解ご回答いただきましてありがとうございました。とても参考になりました!