プロが教えるわが家の防犯対策術!

セルに値を入力すると、他のシートで演算され結果がセル"A1"にTRUE、FALSEと表示される関数式ができています。
セル"A1"の変化によりマクロ実行させたいと思います。プログラムの案をお願いします。

A 回答 (2件)

原理的にはNo.1の回答のように、シートのイベントを使用します。



但し、No.1の回答ではうまく行きません。

No.1の回答でうまく行くのは
・セルA1の(式の評価結果ではなく)式そのものが変更された
・セルA1の(式や式の評価結果ではなく)直接入力値が変更された
場合のみに限ります。

つまり、他のシートや、他のセルに値を入力した事によって、A1セルの評価結果が変化したとしても「A1セルそのものがChangeされた訳ではない」ので、A1セルに対するWorksheet_Changeイベントは発生しません。

そういった訳で、Worksheet_Changeイベントを使うなら「A1セルの式から参照されていて、値を変化させるとA1セルの評価結果が変化する、参照される側のセルにWorksheet_Changeイベントを仕掛ける」必要があります。

もし、A1セルの式が
=if(or(and(Sheet2!D24 = 0,Sheet3!B16 = 1),sum(sheet1!A10:C30)<100)),true,false)
だとすると、
Sheet2!D24
Sheet3!B16
sheet1!A10:C30
のそれぞれに対してWorksheet_Changeイベントを仕掛ける必要があります。

そして、そのイベント処理の中では「最終的にA1セルの評価結果が変化する可能性があるかどうか」を自前で判断しなければなりません。そしてその処理は非常に複雑になるでしょう。なぜなら、イベント発生前のA1の評価結果を何処かに記録しておき、イベント発生時に「イベント発生前のA1の評価結果と、イベント発生後の新たなA1の評価結果が、等しいか異なるか」を調べねばなりません。

こうなると「イベント一発書けば済む」と言う訳にはいきません。
    • good
    • 0

A1に結果がセットされるシートに、シートに変化があったときのイベントWorksheet_Changeを作成してみればいかがでしょうか。



Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row = 1 Then
ここに処理したい内容をマクロで記述
End If
End Sub
    • good
    • 0

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