2017-03-27 19 views
0

提案された割引率に基づいて価格を計算するか、提案された価格に基づいて割引を計算します。Excel VBA If Thenセル値の条件付き機能

私は、いずれかのパラメータを使用して理想的な価格を決定するために前後に調整できる必要があります。

私は何もユーザーによって上書きされないようにコードを作成しましたが、 "IF"式の '値がfalseの場合'の要素は1つの列のゼロ値に依存するため問題があります。図を別の図に入力する前に手動で調整しません。これにより、新しい図形がリセットされます。

「Promo Price per Unit」に値が入力されている場合は、シートに「提案されたプロモーションPOR%」列の値をゼロにリセットすることが理想的です。これは可能ですか?

これは現時点でのコードです。明瞭さの計算式については

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Intersect(Target, Range("b21:b26")) Is Nothing Then Exit Sub 

Application.EnableEvents = False 
ActiveSheet.Range("$i21:$i26").Formula ="=IF(Proposal!$b21>Formulae!$a$5,Proposal!$g21-(Proposal!$g21*Proposal!$b21), (Proposal!$g21-Proposal!$i21)/Proposal!$g21)" 
Application.EnableEvents = True 

End Sub 

$ $ 5がゼロであり、列の$ I21です!彼らがしたい場合はユーザーが価格を入力することの$ I26。ここに何か入力すれば、列bはゼロにリセットされるはずです。

これが私のシートの列やヘッダのスクリーンショット

enter image description here

答えて

1

Worksheet_Changeイベントがお手伝いしますです。 Worksheet_SelectionChangeは、ユーザがアクティブセルを変更するたびに起動し、Worksheet_Changeはユーザが任意のセル()を編集するたびに発生します。

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("$i21:$i26"")) Is Nothing _ 
    And Target.Rows.Count = 1 and Target.Columns.Count = 1 Then 
    'assumes event will fire only on changing one cell at a time 

    Application.EnableEvents = False 
    Target.Offset(0,-7).Value = 0 
    Application.EnableEvents = True 

End If 

End Sub 
+1

*私の側から*まだ、実際に何かが入力されたという条件を追加したいかどうかはわかりません。おそらく 'Trim(Target.Value2)<>のようなものです。vbNullString And Isnumeric(Target.Value2)Then' ...単なる考えです。 – Ralph

+0

良い考え@ラルフ。彼の裁量で追加するOPのために残します。 –

+0

ありがとうございます。私はあなたが何を得ているのか分かっていると思いますが、私はVBAには全く新しいので、私の具体的な条件付き計算を使ってコードを実際に構築する方法についてもう少し指導していただきたいと思います。 – LBow509

関連する問題