我想要创建下表:
价值 | 与上一行的差异 |
---|---|
10 | 0 |
20 | 10 |
80 | 60 |
我希望公式是通用的,不直接引用任何单元格。
以下公式有效:
=TEXT(INDIRECT(ADDRESS(ROW(),COLUMN() - 1)),"####.#") - TEXT(INDIRECT(ADDRESS(ROW() - 1,COLUMN() - 1)),"####.#")
但是,我想知道是否有办法简化或缩短它(不使用宏)。
答案1
在查看了 JohnSUN 的评论和回答后,我发现即使没有设置 R1C1 符号,下面的操作仍然有效。转到工作表 > 命名范围和表达式 > 定义thisCell
并用表达式指定名称INDIRECT("RC";0)
。
现在,这与您的原始公式作用相同:
=OFFSET(thisCell;0;-1) - OFFSET(thisCell;-1;-1)
答案2
我不知道你是否会接受这个建议作为答案,但值得一试。
将光标放在单元格中B3。 选择工作表 - 命名范围和表达式 - 定义或者直接按Ctrl+F3。 点击添加按钮在这里
设置一个名称。任意。您可以写“abracadabra”或“Alohomora”或“AvadaKedavra”...但如果名称有意义就更好了 - 例如“NextDifference”。
写下公式。只需使用相对于当前单元格的寻址(还记得我们现在突出显示的 B3 吗?)
=A3-A2
保存此新名称(添加和好的)
你还在牢房里吗B3? 在这里写出公式=NextDifference
。
结果符合预期吗?好的,所以你没有犯任何错误。(否则,请小心重复此步骤)
拉伸单元B3向下。看到了吗?每个单元格都包含相同的公式,但没有直接寻址,就像您想要的那样。选择其中一个单元格,例如,B7并按Ctrl+F3又来了。看到了吗?对于这个单元格,名称NextDifference
包含公式A7-A6
现在我们开始讨论这个技巧。从表格中删除任意数量的行,将它们移到另一个位置,对表格进行排序 - 公式=NextDifference
将起作用并给出正确的结果。(当然,如果您删除最上面的行,您可能会破坏这个公式 - 在这种情况下,您可以得到一个#参考!错误。但是你给出的公式也会产生同样的效果,对吗?)