• 締切済み

セルの値変更でマクロ実行

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

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.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の評価結果が、等しいか異なるか」を調べねばなりません。 こうなると「イベント一発書けば済む」と言う訳にはいきません。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

A1に結果がセットされるシートに、シートに変化があったときのイベントWorksheet_Changeを作成してみればいかがでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Row = 1 Then ここに処理したい内容をマクロで記述 End If End Sub

関連するQ&A

専門家に質問してみよう