Google 工作表 - 如何将过滤功能与过滤视图相结合
Google Sheets - How to Combine Filter Function with Filter View
我一直在处理超过 100 行的跨页sheet,并找到了一种合并 "hide" 复选框的 hacky 方法,该复选框将隐藏 C 列与特定值匹配的任何行(建筑类型),在方框旁边指定。为此,我首先创建了一个这样的函数:=FILTER(Data!A1, OR(Data!$C1<>$O, $P))
并将其拖过单独的 sheet 中的每一行和每一列。这读作,“如果数据中该行中的相应列 C 与建筑物类型不匹配,或者如果复选框被选中,则显示当前单元格。这样,当建筑物类型匹配时,整行被隐藏,并且框未选中。A1 单独调整到每一行,$C1 引用了建筑物的类型,$O$2 引用了可能隐藏的目标类型,$P$2 是复选框。
问题 #1:这在数百个单元格中创建了很多公式,当找不到建筑类型时,它会在整行中显示 #N/A。过滤器视图能够隐藏这些值,但每次我想隐藏或取消隐藏另一种建筑类型时都必须重新设置值很不方便。
我的修复尝试:我再次使用过滤器函数从一个单元格中重新创建整个 sheet,隐藏适当的行,使用:=FILTER(Data!A2:J191, ARRAYFORMULA((Data!$C2:C191<>$O)+(Data!D2:D191*$P))
这是 hacky 部分。我将复选框的 "true" 乘以 D 列中的数组任意正数值 "OR" 它与每个建筑类型值以实现与以前相同的目标,但对于每个单元格。
问题 #2 出现了:当我得到漂亮的 sheet 时,我不能通过筛选视图对其进行排序,否则它会抛出错误并且不显示任何内容。我正在对原始选项卡进行排序,但打算完全忽略它。那么我如何结合这两者,过滤视图和过滤功能,创建一个很好的传播sheet,我可以在其中排序和隐藏行?
奖励问题 #3:要添加更多按钮,我的公式是这样的:=FILTER(Data!A1:J191, ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)))
这很丑陋,而且加载速度很慢。有没有办法创建一个函数范围来处理对多行的相同检查,并将其压缩成一个公式?
这是给你的另一个怪物(这个重复较少):
=QUERY(
{IGNORE!A2:J, IGNORE!P2:P},
"SELECT * "
& "WHERE Col3 is not null "
& IF(COUNTIF(P2:P9, False) = 0, "", "AND NOT Col3 MATCHES '^" & JOIN("$|^", IFNA(FILTER(O2:O9, P2:P9 = False))) & "$' ")
& IF(COUNTIF(A2:K2, ">0") = 0, "", "ORDER BY Col" & JOIN(", Col", IFNA(FILTER(COLUMN(A2:K2) & IF(COLUMN(A2:K2) = 1, "", " DESC"), A2:K2)))),
0
)
您的复选框应该保留。第二行可以只有 True/False 个值,不需要列号(需要一个简单的更改 COUNTIF(A2:K2, ">0")
-> COUNTIF(A2:K2, True)
)。随后的排序现在也有效(但仅按列的实际顺序:如果选中 1、3、4,则它将首先按 1 排序,然后按 2,然后按 4)。您可以在右侧放置另一个关于排序的配置 table,您可以在其中 select 所有您希望排序的列,它们的相互顺序,以及它们的 desc/asc。
编辑: 添加了 IFNA
所以 FILTER
不会 return 错误,将多个 ANDS
更改为 MATCHES
和简单的正则表达式。
我一直在处理超过 100 行的跨页sheet,并找到了一种合并 "hide" 复选框的 hacky 方法,该复选框将隐藏 C 列与特定值匹配的任何行(建筑类型),在方框旁边指定。为此,我首先创建了一个这样的函数:=FILTER(Data!A1, OR(Data!$C1<>$O, $P))
并将其拖过单独的 sheet 中的每一行和每一列。这读作,“如果数据中该行中的相应列 C 与建筑物类型不匹配,或者如果复选框被选中,则显示当前单元格。这样,当建筑物类型匹配时,整行被隐藏,并且框未选中。A1 单独调整到每一行,$C1 引用了建筑物的类型,$O$2 引用了可能隐藏的目标类型,$P$2 是复选框。
问题 #1:这在数百个单元格中创建了很多公式,当找不到建筑类型时,它会在整行中显示 #N/A。过滤器视图能够隐藏这些值,但每次我想隐藏或取消隐藏另一种建筑类型时都必须重新设置值很不方便。
我的修复尝试:我再次使用过滤器函数从一个单元格中重新创建整个 sheet,隐藏适当的行,使用:=FILTER(Data!A2:J191, ARRAYFORMULA((Data!$C2:C191<>$O)+(Data!D2:D191*$P))
这是 hacky 部分。我将复选框的 "true" 乘以 D 列中的数组任意正数值 "OR" 它与每个建筑类型值以实现与以前相同的目标,但对于每个单元格。
问题 #2 出现了:当我得到漂亮的 sheet 时,我不能通过筛选视图对其进行排序,否则它会抛出错误并且不显示任何内容。我正在对原始选项卡进行排序,但打算完全忽略它。那么我如何结合这两者,过滤视图和过滤功能,创建一个很好的传播sheet,我可以在其中排序和隐藏行?
奖励问题 #3:要添加更多按钮,我的公式是这样的:=FILTER(Data!A1:J191, ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)), ARRAYFORMULA((Data!$C1:C191<>$O)+(Data!D2:D192*$P)))
这很丑陋,而且加载速度很慢。有没有办法创建一个函数范围来处理对多行的相同检查,并将其压缩成一个公式?
这是给你的另一个怪物(这个重复较少):
=QUERY(
{IGNORE!A2:J, IGNORE!P2:P},
"SELECT * "
& "WHERE Col3 is not null "
& IF(COUNTIF(P2:P9, False) = 0, "", "AND NOT Col3 MATCHES '^" & JOIN("$|^", IFNA(FILTER(O2:O9, P2:P9 = False))) & "$' ")
& IF(COUNTIF(A2:K2, ">0") = 0, "", "ORDER BY Col" & JOIN(", Col", IFNA(FILTER(COLUMN(A2:K2) & IF(COLUMN(A2:K2) = 1, "", " DESC"), A2:K2)))),
0
)
您的复选框应该保留。第二行可以只有 True/False 个值,不需要列号(需要一个简单的更改 COUNTIF(A2:K2, ">0")
-> COUNTIF(A2:K2, True)
)。随后的排序现在也有效(但仅按列的实际顺序:如果选中 1、3、4,则它将首先按 1 排序,然后按 2,然后按 4)。您可以在右侧放置另一个关于排序的配置 table,您可以在其中 select 所有您希望排序的列,它们的相互顺序,以及它们的 desc/asc。
编辑: 添加了 IFNA
所以 FILTER
不会 return 错误,将多个 ANDS
更改为 MATCHES
和简单的正则表达式。