Excel VBA如果那么函数以单元格值为条件

时间:2017-03-27 14:44:58

标签: excel vba excel-vba

我想根据建议折扣%计算价格或根据建议价格计算折扣。

我需要用户能够使用任一参数并来回调整以确定其理想价格。

我已经对公式进行了编码,以便用户不会覆盖任何内容,但是因为“IF”公式中的“value if false”元素依赖于一列中的零值而导致问题,因此如果用户没有,则重置在将图形输入另一个图形之前,请手动调整此值。这导致重置新数字。

理想情况下,如果在“每单位促销价”中输入值,我希望工作表将“Proposed Promo 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

为了清晰公式!$ a $ 5为零,如果他们愿意,用户将输入价格为$ i21:$ i26。如果他们确实输入了一些内容,那么b列应该重置为零。

这是我的表格中的列和标题的屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:1)

Worksheet_Change事件会对您有所帮助。每次用户更改活动单元格时都会触发Worksheet_SelectionChange ,而Worksheet_Change会在用户对任何单元格进行编辑时触发。< / p>

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