【问题标题】:Ignoring Hidden Table Rows in Excel Formula忽略 Excel 公式中的隐藏表行
【发布时间】:2016-09-06 06:50:06
【问题描述】:

晚上好。

我试图让我的公式忽略过滤表中的隐藏行。我尝试了这里显示的一些技巧,但没有成功。

我从 BigFix(网络管理工具)获得的 CSV 类似于:

应用程序列列出了同一单元格中的应用程序。因此,当我执行计数函数来识别问题时,我必须使用通配符(我在不同的tab 中搜索结果)。

=COUNTIF('Input Data'!C:C,"*"&Results!A2&"*")

我希望能够过滤第一个选项卡上的表格,并让公式结果准确显示在第二个选项卡上。

有什么想法吗?

更新: 我觉得更多信息会有所帮助。我希望“结果”选项卡自动更新的原因是我计划根据该选项卡上的信息构建图表。我希望能够过滤“输入数据”中的表格以仅包含部门 A,并让图表自动更新到部门 A 的信息。

我正在使用的 excel 文件有多达一千个条目,我正在尝试获取可以复制/粘贴的图表,以便尽可能高效地放入演示文稿中。

【问题讨论】:

  • 为什么不只为 A、B 和 C 提供 COUNTIFS
  • @Jeeped 我添加了一个更新来更好地解释我为什么要寻找创建动态表的能力。

标签: excel excel-formula


【解决方案1】:

不过滤源数据,而是使用 Countifs 函数并将过滤条件添加到 Countifs。

【讨论】:

  • 我对我的问题添加了更新,以帮助解释为什么我希望公式忽略隐藏的行。我想根据第一个选项卡上的过滤表创建动态图,但只有在该过滤表已搜索选项卡 2 上的特定关键字之后。
【解决方案2】:
=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() 将产生传递值的总和。

【讨论】:

  • 应该是 103 还是这是 3 或 103 都打折隐藏行的情况之一? @user112802 - 有关丢弃隐藏行的各种操作的详细信息,请参阅 SUBTOTAL function
  • @Jeeped,感谢您的纠正。正如你所指出的,它应该是 103。错误地我把它设为 3。所以应该用 103 而不是 3 替换公式。通过区分它的实际用途 3 和 103,Subtotal() 可以正常工作。这是我的公式给出的图片,两者都是相同的。这部分是导致该困境的实际原因(ISNUMBER(SEARCH(A2,'Input Data'!C:C)))。如果我们忽略该部分并将其乘以 1,那么我们将知道您突出显示的错误部分 =SUMPRODUCT(SUBTOTAL(3,OFFSET('Input Data'!C:C,ROW('Input Data'!C:C)- MIN(ROW('输入数据'!C:C)),,1))*1)
  • @user112802,在原帖中添加了解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
相关资源
最近更新 更多