我想添加某个范围内公式的组成部分。我们有一个部分显示特定项目的净现金流,还有多个特定项目。
例如,=8+9-5
在多个单元格中显示“12”。如果值不是在单元格级别上进行净额计算,则很容易使用公式SUMIF
仅添加正数和负数单元格,但由于它是在单元格级别进行净额计算,因此我尝试深入研究底层值并使用与公式等效SUMIF
但适用于所有底层组件的公式。
对于上面的例子,我试图获取一个范围为“+17”的摘要单元格,以及一个显示“-5”的单元格。
我怎样才能做到这一点?
答案1
最重要的问题是如何从工作表访问另一个单元格的公式字符串。没有现有的工作表函数可以做到这一点。因此,您必须先做以下两件事之一:1) 使用查找和替换来更改单元格的内容,使它们不再保存公式而是保存字符串,或者 2) 使用 VBA 访问单元格的公式字符串。
(1)可以通过选择要操作的单元格,然后按Ctrl+H打开替换对话框来完成。搜索=
(假设您感兴趣的公式与您的示例类似,并且不包含后续等号),然后将其替换为空。这会将公式显示值 12 的单元格更改=8+9-5
为显示字符串的单元格8+9-5
。
(2)可以通过访问单元格属性来实现.Formula
。例如,要获取单元格 A1 的公式,可以使用如下所示的简单 UDF:
Public Function GetFormula(r as Range) as String
GetFormula = r.Formula
End Function
无论使用哪种方法,获得这些字符串后,您都必须巧妙使用字符串操作函数(例如FIND
、LEN
和VALUE
)来提取所需的值。由于这样做既浪费您也浪费我的时间,因此我在此不做此操作。
答案2
在您的工作簿中添加一张工作表;我们称之为“设置”。
在 A1 中输入8
,在 A2 中输入9
,在 A3 中输入-5
。复制的列数与原始工作表中存在常数公式的列数相同。(根据范围的组织方式,您可能需要设置工作表以使用 A1、B1、C1 并向下复制。这样做的目的是创建一个与原始工作表上的范围形状相匹配的范围。)
在原始工作表中,将所有公式替换=8+9-5
为=Setup!A1+Setup!A2+Setup!A3
。这可以通过评估公式的“查找和替换”操作来完成。
现在您可以在设置表上构建条件公式,而不是原始表中的硬编码值。
=sumif(Setup!A1:A3,">0")
=sumif(Setup!A1:A3,"<0")