计算细胞范围的折扣

时间:2015-11-05 17:09:16

标签: excel vba excel-vba

我目前有一系列单元格显示价格。我需要最终用户指定他们想要看到的折扣,然后按下一个命令按钮,将其应用于列表价格。

  • 范围(C27:39; C41:C42; C44:45)
  • 折扣%(C127) - 最终用户填充此
  • 将折扣%应用于指定范围内的当前结果    ---不会干扰范围单元格中的当前SUMIFS公式。

我已经创建了命令按钮。我理解用于选择范围的代码,并使用特定值填充它,但我仍然坚持下一个代码。在我看来,它应该简单:

Range (C27:39; C41:C42; C44:45) * Discount% (C127)

我尝试在工作簿的另一部分中复制并粘贴范围中的值,应用折扣,然后将这些值粘贴回原始范围单元格,但后来我丢失了SUMIFS公式,并且如果原始的那样需要那些公式模型的输入改变 - 在另一个选项卡上。

截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效

Dim rng As Range
Dim cel As Range
With ActiveSheet
    Set rng = .Range("C27:C39,C41:C42,C44:C45")
    For Each cel In rng
        if lcase(left(range(C126),1)) = "y"
            if instr(cel.formula,"C127") = 0 then cel.formula = cel.formula & "* C127"
        else
            cel.formula = split(cel.formula,"*")(0)
        End if
    Next
End With

编辑:我没有意识到细胞中有一个公式。编辑将在单元格中放置一个新公式。它保留旧的并添加“* C127”

编辑2:现在代码将查看C126并查看是否应该应用折扣,如果是,它将添加到公式中,否则它将删除“* C127”

编辑3:添加了一项检查,以便不会双倍地应用折扣。

编辑4:现在我想到了,为什么不在C137中为所有三个可能的调整器添加一个if语句:

= If(left(C126,1) = "y",C127,1) * If(left(C130,1) = "y",C131,1) * If(left(C134,1) = "y",C135,1)

然后在您要调整的单元格中,只需将“* C137”添加到现有公式中,您将永远不需要使用vba或更改公式。

相关问题