假设我的单元格 A1-A10 填充了数字。我在单元格 B1 中的初始公式是 =A1-A6。但是,我想删除单元格 A3(如果可能,保持删除后的内容可见),我希望 B1 中的公式能够识别该更改,然后自动调整为 =A1-A7 (这个想法是我希望 A1 减去它下面的单元格 5“未删除”单元格中的数字)。然后,如果我删除单元格 A5,我希望公式将自身调整为 =A1-A8,依此类推。有谁知道如何做到这一点?
问问题
1199 次
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
:
- 按ALT- F11- 这将打开 VBA 编辑器。
- 插入新模块:
Insert > Module
. 将代码粘贴到添加的模块:
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
将公式添加到 B1:
=A1-INDIRECT("A"&(6+StrikeOut(A2:A10)))
- 将删除线字体设置为
A1:A10
. - 不幸的是,单元格格式更改不会触发任何更改事件,因此您需要按下F9或更改工作表上的任何单元格值以重新计算并因此更新结果
B1
。
共享示例文件:https ://www.dropbox.com/s/n9o7tn3ks3x8nza/StrikeOut.xlsm
PS至少对我来说非常有用)))
于 2013-02-03T12:57:26.890 回答