动态Excel减法

时间:2013-02-03 12:12:54

标签: excel dynamic subtraction

说我已经有A1-A10号格式的数字。我在单元格B1中的初始公式是= A1-A6。然而,我想打出单元格A3(如果可能的话,保持内容在可见的下方可见),我希望B1中的公式识别出这种变化,然后自动调整为= A1-A7 (我的想法是,我希望A1减去单元格中的数字5“未被击中”的单元格下面的单元格)。然后,如果我击出单元格A5,我希望公式将自己调整为= A1-A8,依此类推。有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

编辑#1:误读输入,抱歉)

有点直截了当,但会完成这项工作:输入=A1-INDIRECT("A"&SMALL(IF(A:A<>"",ROW(A:A),""),6))并按 CTRL + SHIFT + ENTER 而不是通常 ENTER - 这将定义一个ARRAY公式,并在其周围生成{}括号(但不要手动输入!)。

为了加快计算速度,您可以将A:A替换为任何有限的范围。

示例文件(结果公式带有黄色标记):https://www.dropbox.com/s/sy7zkg71xtfgib9/Subtract5th.xlsx

编辑#2:误读“罢工”,对不起)

默认Excel函数可能无法读取字体样式(以及类似的单元格属性),这就是您需要添加名为StrikeOut的UDF的原因:

  1. ALT - F11 - 这将打开VBA编辑器。
  2. 插入新模块:Insert > Module
  3. 将代码粘贴到添加的模块:

    Function StrikeOut(R As Range) As Long
    Dim c As Range
    StrikeOut = 0
    For Each c In R.Cells
        If c.Font.Strikethrough = True Then StrikeOut = StrikeOut + 1
    Next
    End Function
    
  4. 将公式添加到B1:=A1-INDIRECT("A"&(6+StrikeOut(A2:A10)))

  5. 将删除线字体设置为A1:A10中的任何单元格。
  6. 不幸的是,单元格格式更改不会触发任何更改事件,因此您需要按 F9 或更改工作表上的任何单元格值以重新计算,从而更新B1中的结果。 / LI>

    共享示例文件:https://www.dropbox.com/s/n9o7tn3ks3x8nza/StrikeOut.xlsm

    P.S。至少对我来说非常有用)))