过滤后仅计算可见单元格

时间:2017-10-19 07:14:17

标签: excel excel-vba excel-formula vba

我一直在努力做一个excel公式,但无法找到合适的组合。

目标:我想要将过滤器应用于原始数据集后才可见的COUNTIFS单元格。

当前/错误输出:38

正确输出:15

以下是当前公式:

=COUNTIFS(INDEX('Current Month'!$A:AJ,0,MATCH("Dryness + Absorbency",'Current Month'!$A$1:$AJ$1,0)),"POSITIVE")

我已经尝试了小计,但值是错误的。其次,小计函数显示索引/匹配函数的错误。

以下是我尝试的内容:

=COUNTA(103,INDEX('Current Month'!$A:AJ,0,MATCH("Dryness + Absorbency",'Current Month'!$A$1:$AJ$1,0)),"POSITIVE")

我也尝试用 SUBTOTAL 替换 COUNTA ,但它显示错误。

希望有人可以建议我使用什么语法来获取可见细胞计数以及如何将其合并到我当前的公式中。谢谢

2 个答案:

答案 0 :(得分:0)

使用小计功能。它将根据过滤器调整返回值。

此处有关如何使其成为条件的更多信息:https://www.mrexcel.com/forum/excel-questions/63754-subtotal-if.html

答案 1 :(得分:0)

如果你将索引函数替换为我提到的标准公式

,这就是你得到的
=SUMPRODUCT((INDEX('Current month'!$A1:AJ10,0,MATCH("Dryness + Absorbency",'Current month'!$A$1:$AJ$1,0))=C10)*(SUBTOTAL(103,OFFSET(INDEX('Current month'!$A1:AJ10,1,MATCH("Dryness + Absorbency",'Current month'!$A$1:$AJ$1,0)),ROW(INDEX('Current month'!$A1:AJ10,0,MATCH("Dryness + Absorbency",'Current month'!$A$1:$AJ$1,0)))-MIN(ROW(INDEX('Current month'!$A1:AJ10,0,MATCH("Dryness + Absorbency",'Current month'!$A$1:$AJ$1,0)))),0))))

是的,它有点长,但确实有效。

我已将全列引用更改为前十行以进行测试。您可以使用全列引用,但它有点慢

=SUMPRODUCT((INDEX('Current month'!A:AJ,0,MATCH("Dryness + Absorbency",'Current month'!A1:AJ1,0))=C10)*(SUBTOTAL(103,OFFSET(INDEX('Current month'!A:AJ,1,MATCH("Dryness + Absorbency",'Current month'!A1:AJ1,0)),ROW(INDEX('Current month'!A:AJ,0,MATCH("Dryness + Absorbency",'Current month'!A1:AJ1,0)))-MIN(ROW(INDEX('Current month'!A:AJ,0,MATCH("Dryness + Absorbency",'Current month'!A1:AJ1)))),0))))

我必须将OFFSET之后的INDEX语句中的row参数从0更改为1才能获得OFFSET的单个单元格引用。

我的测试数据如下所示,在E列中过滤了'x'时,计算出5个未经过滤的正数,2个正数。

enter image description here