我有一列我希望求和的数字,但仅限于某些匹配条件,因此我已成功使用SUMIF
和SUMIFS
。现在我想让范围变得动态。这是有效的,非动态的功能:
=SUMIF(B2:B60, "CC/*", A2:A60)
B列包含以“CC /”开头的值,而A列包含值。
我的新功能,如果列B已排序且单元格之间不包含空格,则该功能为:
=SUMIF(OFFSET(B1, 1, 0, COUNTA(B:B), 1), "CC/*", OFFSET(A1, 1, 0, COUNTA(A:A), 1))
这里显而易见的问题是COUNTA
返回了多少字段有一个值,OFFSET
返回了许多字段,无论它们是否为空。然后我的SUMIF
函数处理该数据并返回意外的总数,因为存在空白单元格。
这是一个示例数据表。我SUMIF
的预期结果是3.00;但是,上面的代码将返回1.00,因为COUNTA
将返回2,因为第二列中只有两个非空白字段。
A B
+-------+--------+
1| Cost | Source |
+-------+--------+
2| 1.00 | CC/1 |
+-------+--------+
3| 10.00 | |
+-------+--------+
4| 2.00 | CC/2 |
+-------+--------+
5| 20.00 | |
+-------+--------+
P.S。我发现这个论坛帖子看起来像是我正在寻找的,但很难将概念应用到我的特定问题。
http://www.mrexcel.com/forum/excel-questions/451089-count-blanks-dynamic-range.html
答案 0 :(得分:1)
只要colA中没有空格,您就可以使用:
=SUMIF(OFFSET(B1, 1, 0, COUNTA(A:A), 1), "CC/*", OFFSET(A1, 1, 0, COUNTA(A:A), 1))
答案 1 :(得分:1)
由于您使用B列中的文本作为条件,因此范围的范围应该是包含B列中文本的最后一行。使用非易失性INDEX function代替volatile {{3和} OFFSET function找到包含B列中文本的最后一行,公式变为,
=SUMIF(B2:INDEX(B:B, MATCH("zzz",B:B )), "CC/*", A2:INDEX(A:A, MATCH("zzz",B:B )))
答案 2 :(得分:0)
我可能错过了一些东西,但这可以通过简单地使用开放式范围来实现吗?
=sumif(B2:B, "CC/*", A2:A)