2017-09-06 9 views
0

これは一般的な質問ですので、これは前に尋ねられていることを確認してください。ワークシートの範囲を持つExcelで指定された範囲が計算されるときにのみWorksheet_Calculate()を実行するように制限する方法

は、B6を言う:すべての計算結果は、私がWorksheet_Calculate()サブルーチンで問題を抱えていているF12は

私の問題はworksheet_calculateのためのこの非常に一般的なコードであることですサブルーチン

Private Sub Worksheet_Calculate() 
    Dim aCell as Range 
    Dim aRange as Range 
    Set aRange = Range(B6:B12) 
    For Each aCell in aRange 
      SomeFunction(aCell) 
    Next 
End Sub 

範囲C6で起こる任意の計算:F12が発生するaRangeとSomeFunction(aCell)に不要な呼び出しを通じて反復を引き起こします。

B6:B12の範囲で計算が実行されている場合のみ、このシナリオを実行できますか?

+0

あなたが持っている可能性がありますもう少し具体的であるように。データのサンプルを表示することがあります。計算はいつ実行されますか?あなたのコードには 'B6:B12'がありますが、あなたの質問には' C6:F12'と 'B6:F12'があります。 – ShanayL

+0

Range'B6:B12'に値がある場合にのみ、関数を実行しようとしていますか?あなたがしようとしているものであれば、もし ''セル ''を使う ''セル 'や' 'レンジ変更' '(https://stackoverflow.com/questions/409434/automatically-execute-an-excel-macro-on) -a-cell-change) – danieltakeshi

+0

別々の計算がすべてのセルB6:F12で実行されるため、35通りの計算が行われます。 B6:B12にある計算が起こると、SomeFunction()が呼び出されます。いつでもワークシート上の任意の計算が呼び出されるたびに、SomeFunction()が反復処理を介して呼び出されます。 – Chris

答えて

0

あなたFORループを開始する前にこれを追加します。

If Not Application.Intersect(ActiveCell, aRange) Is Nothing Then 

をこれだけFORループの引き金となるでしょう、あなたが与えられた範囲

EDIT
にある場合、私は以下のようなコードを設定していますそれは私のために働くようです:

Private Sub Worksheet_Calculate() 
    Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet8") 
    Dim aRange As Range: Set aRange = oWS.Range("F6:F10") 
    If ActiveSheet.Name = oWS.Name Then 
     If Not Application.Intersect(ActiveCell, aRange) Is Nothing Then 
      MsgBox "In range" 
     End If 
    End If 
End Sub 
+0

ActiveCellはworksheet_calculateの一部である保護された変数ですか?それとも宣言しなければならないのですか? – Chris

+0

残念ですが、これはオブジェクトエラー1006で終了します。別のワークシート上のセルに値を作成しているときにワークシートを作成するときもありますし、ワークシートを作成してセルはアクティブなセルを移動し、これに問題が発生します。 – Chris

関連する問題