=SUMPRODUCT(SUBTOTAL(3,OFFSET('Input Data'!C:C,ROW('Input Data'!C:C)-MIN(ROW('Input Data'!C:C)),,1))*(ISNUMBER(SEARCH(A2,'Input Data'!C:C))))
在上面的公式中,将 C:C 限制为您的实际数据范围或使用命名范围来标识实际数据范围。
编辑
上述公式应替换为 103 而不是 Jeep 指出的 3
=SUMPRODUCT(SUBTOTAL(103,OFFSET('Input Data'!C:C,ROW('Input Data'!C:C)-MIN(ROW('Input Data'!C:C)),,1))*(ISNUMBER(SEARCH(A2,'Input Data'!C:C))))
在上面的公式中,将 C:C 限制为您的实际数据范围或使用命名范围来标识实际数据范围。
根据 OP 的要求添加说明。
在上面的公式中使用 Sumproduct() Subtotal() Offset() Min() Row() IsNumber() Search() 函数组合来达到您的预期结果。
Row() - 将获取给定范围的行号
Min() - 将获得给定数字的最小值
Offset() - 用于将引用重定向到给定范围的每个单元格。
Subtotal() - 用于查找重定向引用的(未)隐藏状态。
Search() - 用于查找给定范围内的特定文本(不区分大小写)将导致数字或错误。
IsNumber() 用于检查搜索是否返回数字或错误。所以 Isnumber 将返回布尔值 True/False 作为结果。
C 列 D 列
过滤数据
一个1
b 1
一个1
一个2
一个2
以上数据从第 1 行开始,标题位于第 1 行。假设我用 1 过滤了 D 列。使用下面的公式将得到 2。
=SUMPRODUCT(SUBTOTAL(103,OFFSET('输入数据'!C2:C6,ROW('输入数据'!C2:C6)-MIN(ROW('输入数据'!C2:C6)),,1 ))*(ISNUMBER(SEARCH("a",'输入数据'!C2:C6))))
ROW('输入数据'!C2:C6) = {2;3;4;5;6}
MIN(ROW('输入数据'!C2:C6)) = 2
ROW('Input Data'!C2:C6)-MIN(ROW('Input Data'!C2:C6)) 应该读作
{2;3;4;5;6}-2 = {0;1;2;3;4}
OFFSET('输入数据'!C2:C6,ROW('输入数据'!C2:C6)-MIN(ROW('输入数据'!C2:C6)),,1) = '输入数据'! C2,'输入数据'!C3,'输入数据'!C4,'输入数据'!C5,'输入数据'!C6
SUBTOTAL(103,OFFSET('输入数据'!C2:C6,ROW('输入数据'!C2:C6)-MIN(ROW('输入数据'!C2:C6)),,1)) 应该读作
SUBTOTAL(103,'输入数据'!C2,'输入数据'!C3,'输入数据'!C4,'输入数据'!C5,'输入数据'!C6) = {1;1;1; 0;0}
Subtotal() 到达每个(单元格)引用的可见状态。
SEARCH("a",'输入数据'!C2:C6) = {1;#VALUE!;1;1;1}
ISNUMBER(SEARCH("a",'Input Data'!C2:C6)) 应该读作
ISNUMBER({1;#VALUE!;1;1;1}) = {TRUE;FALSE;TRUE;TRUE;TRUE}
SUBTOTAL(103,OFFSET('输入数据'!C2:C6,ROW('输入数据'!C2:C6)-MIN(ROW('输入数据'!C2:C6)),,1)) = {1;1;1;0;0}
(ISNUMBER(SEARCH("a",'输入数据'!C2:C6))) = {TRUE;FALSE;TRUE;TRUE;TRUE}
{1;1;1;0;0}*{TRUE;FALSE;TRUE;TRUE;TRUE} = {1;0;1;0;0}
SUMPRODUCT({1;0;1;0;0}) = 2
使用 Sumproduct() 来避免输入数组并执行数组公式任务(循环遍历单元格范围),并且 Sumproduct() 将产生传递值的总和。