首页 > 解决方案 > 动态查询范围

问题描述

我有一个电子表格,在其中一个选项卡中我有一个表格,其中包含来自其他选项卡的计算数据。这是一个有 11 列的小桌子。Row(1) 是标题行,A 列是项目列表,B 到 J 列是类型。数据仅由数字组成。

在计算数据时,从 B 到 J 的某些列中的时间值可能完全为零。我想用 QUERY 创建这个表的一个子集,但构造一个动态范围,只获取至少有 1 个大于零的值的列。

我知道可以将范围创建为像 {A:A\B:B\D:D} 这样的数组,但在我的情况下,我不知道哪些列的值可以大于零,我也不知道想要将列放入具有完全零值的范围内。

我创建了一个表达式来将此数组值连接为单元格中的文本,但是我不能将它与 QUERY 公式一起使用,无论是 INDEX 还是 TEXT 函数。表是这样的:

项目 TypeA TypeB TypeC TypeD
Bronze 0 0 0 0
Silver 0 0 1 0
Gold 0 0 1 0
Titanimum 1 0 0 0

对于此表快照,我希望 QUERY 范围为{A:A\B:B\D:D}。但是,随着数据的计算,表格在 2 小时或第二天后可能是这样的:

项目 TypeA TypeB TypeC TypeD
Bronze 1 0 0 1
Silver 0 0 1 0
Gold 0 1 1 0
Titanimum 1 0 0 0

因此,对于这张表的快照,我希望 QUERY 范围为{A:A\B:B\C:C\D:D\E:E}

这是可行的吗?以及如何实现或构建动态 QUERY 范围?

谢谢大家...

标签: google-sheets

解决方案


您可以使用 FILTER 命令根据条件从范围中删除列。

未过滤

Items   TypeA   TypeB   TypeC   TypeD   TypeE   TypeF   TypeG
Bronze  1        0       0       1       0       0        1
Silver  1        1       0       1       0       0        1
Gold    1        0       0       1       0       0        1
Titan   1        0       0       1       1       0        1
1       4        1       0       4       1       0        4

过滤以删除总数为 0 的列

Items   TypeA   TypeB   TypeD   TypeE   TypeG       
Bronze  1       0       1       0       1       
Silver  1       1       1       0       1       
Gold    1       0       1       0       1       
Titan   1       0       1       1       1

“技巧”是对列数据求和(对于您的示例),然后测试 >0

过滤器表达式为:

=FILTER(A1:H5,A6:H6 >0)

通过解释:

A1:H5 是要过滤的范围; A6:H6 >0 选择第 6 行中值 > 0 的所有列

我在 A6 中放置了 1 以确保包含 colA。

您现在可以对上述表达式返回的范围进行查询。


推荐阅读