弹性地在谷歌表中使用多个过滤功能

时间:2015-04-26 06:20:02

标签: google-sheets

在Google电子表格中,我有一个摘要表,我正在从多个工作表中导入信息。我的过滤器功能之一如下所示:

=过滤器(Sheet2!A14:A27,(Sheet2!K14:K27 =" Y")+(Sheet2!K14:K27 =" R")

我有像这样的多个过滤器功能。我面临的问题是我必须为此函数的结果分配一个静态行数,但结果非常动态(可能是1行甚至15行)。

我一直在进行详尽的搜索,但无法找到一种弹性的方法,以便只附加所有Filter函数的结果(在每个结果之间可能有一个空的行/标题行)。

有人在其中一个论坛上给出的一个解决方案是为每个论坛分配静态行数,并使用一个看起来不是一个非常干净的解决方案的脚本隐藏空行(但我可能不得不回头)

另外,我想过使用脚本,但如果我理解正确,脚本只能被触发'从菜单,onOpen,onEdit等也可能不是很直观(必须重新加载电子表格以查看onOpen()等情况下的任何变化。)

使用自定义函数会再次导致同样的问题,因为自定义函数在特定单元格上运行(我们不知道哪个单元格,因为我们试图使其动态化)

很高兴听到任何想法!

2 个答案:

答案 0 :(得分:2)

这是如何堆叠多列。

{A:A; B:B; C:C}

这里是如何堆叠多个过滤器。

{Filter1; Filter2; Filter3}

这里是如何堆叠带有标题的多个过滤器。

{“ Header1”; Filter1;“ Header2”; Filter2;“ Header3”; Filter3}

答案 1 :(得分:1)

您应该始终将您工作的单元格/范围传递到自定义函数,而不是在函数中读取它们。也尝试不直接写,而是返回结果。这样,电子表格将自动正确更新,您不需要任何权限。 这是一个例子

function myFilter(values1, values2) {
  return values1.filter(function(v, i) {
    return values2[i][0] === "Y" || values2[i][0] === "R";
  });
}

然后再做

={myFilter(Sheet1!A14:A27,Sheet1!K14:K27);A1;myFilter(Sheet2!A14:A27,Sheet2!K14:K27)}
但是仍然有点长。但您也可以将中间结果保存在不同的单元格中,然后将结果连接在一起。或者编写一个过滤函数,可以将任意数量的范围作为参数。 你能举一些这些过滤函数的例子。也许有更好的方法来模块化/缩短它。