0

假设我的单元格 A1-A10 填充了数字。我在单元格 B1 中的初始公式是 =A1-A6。但是,我想删除单元格 A3(如果可能,保持删除后的内容可见),我希望 B1 中的公式能够识别该更改,然后自动调整为 =A1-A7 (这个想法是我希望 A1 减去它下面的单元格 5“未删除”单元格中的数字)。然后,如果我删除单元格 A5,我希望公式将自身调整为 =A1-A8,依此类推。有谁知道如何做到这一点?

4

1 回答 1

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 函数可能无法读取字体样式(以及类似的单元格属性),这就是为什么您需要添加名为的 UDF StrikeOut

  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

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

PS至少对我来说非常有用)))

于 2013-02-03T12:57:26.890 回答