3

私の知る限り、Worksheet_Calculate数式の再計算でワークシート内のセルの値が変更されたときに呼び出されます。

数式の再計算で特定のセルが変更された場合にのみ関数を呼び出す必要がある方法はありますか

4

2 に答える 2

2

特定のセルが変更されたときに何かを発生させるには、関連する選択変更イベントをファイル内に埋め込む必要がありますWorksheet_Change(byval target as Range)。セルが次のように変更された場合、ワークシートを再計算できます。

Private Sub Worksheet_Change(byval target as range)

    If target.address = Range("YourCell").Address Then Application.Calculate

End Sub

今、あなたがしたいのは、残りの時間は計算をオフにすることです。(ファイル全体ではなく)単一のシートの計算のみをオフにしたい場合は、アクティブ化されたときに計算をオフにし、非アクティブ化されたときにオンにする必要があります。

Private Sub Worksheet_Activate

Application.Calculation = xlCalculationManual

End Sub

Private Sub Worksheet_Deactivate

Application.Calculation = xlCalculationAutomatic

End Sub

もちろん、再計算するための要件は、上記の例よりもかなり複雑になる可能性があります。まず、問題のシート上でファイルを開くことができます。その場合は、Workbook_Openイベントを使用してシートを検出し、それに応じて計算を設定する必要があります。

次に、ある種の計算を必要とする可能性のある複数のセルがある場合があります。おそらく、計算をオフにしたい理由は、ファイルの実行が遅すぎるためです。その場合、すべての入力セルを識別している場合は、コードを使用して出力を入力できます。1つの方法は、このガイドを使用して数式を入力し、ExcelVisualBasicに数式を入力することです。次に、数式を計算値に置き換えることができます。たとえばRange("YourCell") = Range("YourCell").Value、シート内の数式の数が絶えず増加するのを防ぐことができます。

于 2012-09-28T11:17:50.123 に答える
1

あなたの質問を正しく解釈するかどうか見てみましょう。特定のセル (またはセルのグループ) が変更された場合にのみマクロを開始できるかどうかを知りたいです。

答えはイエスです。Ed のコードを少し調整します。

Private Sub Worksheet_Change(byval target as range)

    If Not Intersect(target.address, Range("YourCells")) is Nothing Then 
       MyMacro()
    End If

End Sub

あなたの「機能」の使い方は、人々をうんざりさせていると思います。そのため、エドの答えは非常に精巧です。

Ok。質問を正しく述べた可能性があり、効率を上げたいだけです。その場合、Ed の回答は差し迫った問題を解決しますが、他のセルを変更するとスプレッドシートが自動的に計算されなくなります。

于 2012-09-28T18:55:50.703 に答える