Excel VBA如果然后function条件的单元格值

我想根据build议的折扣率来计算价格,或者根据build议的价格计算折扣。

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

我已经对公式进行了编码,以避免用户覆盖任何内容,但存在一个问题,因为“IF”公式的“如果为false”元素依赖于一列中的零值,并且如果用户没有手动重置在把数字input到另一个数字之前调整它。 这导致新的数字被重置。

理想情况下,如果在“单价促销价格”中input值,我希望工作表将“提议的促销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,​​如果用户愿意的话,用户将input一个价格。 如果他们在这里input了某些东西,那么列b应该重置为零。

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

在这里输入图像说明

Worksheet_Change事件将帮助你。 每次用户更改活动单元格时 ,都会触发Worksheet_Change ,而在任何时候用户对任何单元格进行编辑时都会触发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