在excel中,想要只对某些值求和(不像SUMIF那么简单)?

时间:2011-02-23 16:00:29

标签: excel vba excel-vba

所以我在命名程序上有两列,另一列有成本值。这三个程序分别是ABC,A,B和C.我想总结所有包含A的程序的成本。所有包含B的程序。所有包含C. ABC的内容明显包含在所有总和中。问题是,为了获得这些程序,电子表格上有一个过滤器,它总结起来。有人可以帮忙吗?这是我的意思的一个例子:

program     cost
A           5.00
B           4.00
ABC         9.00
A           2.00

所以我希望在三个单独的单元格中“与A的总和”= 16.00,“与B的总和”= 13.00,“与C的总和”= 9.00。

1 个答案:

答案 0 :(得分:2)

Item | Total
A    | 16
B    | 13
C    | 9

假设您的上述范围在A1:B5中,我的第一个公式是以下数组公式:

{=SUM(IF(ISERROR(FIND(B6,$A$1:$A$5)),0,$B$1:$B$5))}

通过输入公式并在按Enter键时按住Ctrl+Shift键来创建数组公式。在我的解决方案中,我创建了一个区域,我按总数计算并有一个列(在本例中称为Item),表示我在原始A列中看到的字母。

如果您尝试使用VBA输入此内容,则可以使用FormulaArray属性:

Selection.FormulaArray ="SUM(IF(ISERROR(FIND(B6,$A$1:$A$5)),0,$B$1:$B$5))"

<强>更新

将计算限制为仅可见单元格要复杂一些。假设我们在单元格A1:B5中有原始数据。我们还假设我们的测试值从单元格C7开始(与源数据对齐)。我们的总计公式如下:

=SUMPRODUCT(SUBTOTAL(3,OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1)), --NOT(ISERROR(FIND(C7,$A$1:$A$5))), $B$1:$B$5)

以下部分返回单元格的范围

OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1)

此部分为每个可见单元格返回1,为不可见单元格返回0

SUBTOTAL(3,OFFSET($B$1:$B$5,ROW($B$1:$B$5)-ROW($B$1),0,1))

这部分是我们的标准。 NOT(ISERROR(...将返回TRUE或FALSE。双重负号--将该值转换为负整数,然后删除该否定。

--NOT(ISERROR(FIND(C7,$A$1:$A$5)))

最后,SUMPRODUCT函数将匹配的数组相互相乘并执行求和。前两个数组返回一系列0或1。如果该行都是可见的并且符合我们的标准,那么我们得到1 * 1乘以单元格中的给定值。如果给定的单元格不可见或与标准不匹配,则两者中的一个返回零并且它将整个项目清零。