この
を試してみて、私は意図的であれば、いくつかの文と理解の視点の重複コードにコードを分解しています。たとえば、
Cells(Target.Row, 4) = "Some Calculation" '<~~ TotalCost Changes
Cells(Target.Row, 6) = "Some Calculation" '<~~ Margin$ Changes
Cells(Target.Row, 7) = "Some Calculation" '<~~ Price Changes
一般的な手順で入力してください。
また、Error Handling
とApplication.EnableEvents
の使用にも注意してください。これらの2つは、Worksheet_Change
を使用する場合、である必要があります(MUST)。 Application.EnableEvents = False
は、再帰的アクションがある場合にコードが可能な無限ループにならないようにします。 Error Handling
はエラーを処理するだけでなく、エラーメッセージを表示してApplication.EnableEvents
をTrue
にリセットしてコードを正常に終了することで、コードが分割されないようにします。
コード
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Whoa
Application.EnableEvents = False
If Not Intersect(Target, Columns(1)) Is Nothing Then '<~~ When Cost 1 Changes
Cells(Target.Row, 4) = "Some Calculation" '<~~ TotalCost Changes
Cells(Target.Row, 6) = "Some Calculation" '<~~ Margin$ Changes
Cells(Target.Row, 7) = "Some Calculation" '<~~ Price Changes
ElseIf Not Intersect(Target, Columns(2)) Is Nothing Then '<~~ When Cost 2 Changes
Cells(Target.Row, 4) = "Some Calculation" '<~~ TotalCost Changes
Cells(Target.Row, 6) = "Some Calculation" '<~~ Margin$ Changes
Cells(Target.Row, 7) = "Some Calculation" '<~~ Price Changes
ElseIf Not Intersect(Target, Columns(3)) Is Nothing Then '<~~ When Cost 3 Changes
Cells(Target.Row, 4) = "Some Calculation" '<~~ TotalCost Changes
Cells(Target.Row, 6) = "Some Calculation" '<~~ Margin$ Changes
Cells(Target.Row, 7) = "Some Calculation" '<~~ Price Changes
ElseIf Not Intersect(Target, Columns(7)) Is Nothing Then '<~~ When Cost Price Changes
Cells(Target.Row, 5) = "Some Calculation" '<~~ Margin% Changes
Cells(Target.Row, 6) = "Some Calculation" '<~~ Margin$ Changes
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
私は1が保護され、その行を想定していますし、ユーザーがそのつもり変更ではありません。ヘッダ行が保護されていない場合、あなたは、行1
フォロー
を除外するIf
ステートメントをwithing行番号のチェックを持って、私は最初Cost1の(コストのいずれかを選択します)、Ctrl + Cを実行し、コスト3の下のすべてのセルを選択してCrl + Vを実行すると、値がコピーされますが、選択の前のセルのTotalCostが再計算されます。あなたの助けをあなたより! - 私はあなたが:)
をしようとしているかを見るロナルド・バルディビア24分前
ああはあなたの質問は、このコードに
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cl As Range
On Error GoTo Whoa
Application.EnableEvents = False
If Not Intersect(Target, Columns(1)) Is Nothing Then
For Each cl In Target
Cells(cl.Row, 4) = Cells(cl.Row, 1) + Cells(cl.Row, 2) + Cells(cl.Row, 3)
Next
ElseIf Not Intersect(Target, Columns(2)) Is Nothing Then
For Each cl In Target
Cells(cl.Row, 4) = Cells(cl.Row, 1) + Cells(cl.Row, 2) + Cells(cl.Row, 3)
Next
ElseIf Not Intersect(Target, Columns(3)) Is Nothing Then
For Each cl In Target
Cells(cl.Row, 4) = Cells(cl.Row, 1) + Cells(cl.Row, 2) + Cells(cl.Row, 3)
Next
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
を使用しますか? – texasbruce
数式を使用し、VBA(ダブルクリック/ボタン、/ etc)を使用して、ユーザーが望む場合に式を再確立することを検討しましたか? – CaBieberach