0

我在尝试编写查询时有点挣扎。

我有一个 Google 表格(这里是副本),我需要为其编写查询以创建“主摘要”。有问题的列是主选项卡上的 U 列。基本上,我需要从匹配的工作表中导入列 CDE 和 F,然后在列 T 中输入与行匹配的选定名称。

我知道我需要查询单个工作表并使用类似的东西导入信息

=QUERY(MASTER!T:T,"SELECT MIRANDA! C,D,E,F WHERE MASTER!T:T ='Miranda'",0)

但我没有得到任何地方。我的另一个想法是运行一个 SELECT 函数,比如

=SELECT MIRANDA (C,D,E,F) WHERE MASTER!T:T ='Miranda'

但这也是错误的 :) 我怀疑我的语法不对,因为我还在学习 SQL。而且我相信谷歌应用程序无论如何都会使用稍微修改过的版本。我究竟做错了什么?

4

1 回答 1

1

查询函数的第一部分是要查询的范围。第二部分是要抓住什么。所以我想你可能正在寻找这个:

=QUERY(MASTER!A:T,"SELECT C,D,E,F WHERE T ='Miranda'",0)

并且您不会收到任何列标题,因为 0 表示不使用任何行作为标题。

这将列出 T 为 Miranda 的行的 C、D、E 和 F 列。

编辑:

由于您没有在每个单独的工作表中显示时间戳,因此很难获得单个匹配项,但是只要您的表单中需要,M 列应该是相当安全的检查。

=FILTER(MIRANDA!C2:F, MIRANDA!C2:C=M2)

将为 Miranda 选项卡中与 M2 的值匹配的行返回一个单元格数组,从 C 到 F。照原样,它会将这些放在包含公式的列中,以及接下来的 3 列中。要将它们放在一个单元格中,您需要加入它们:

=join("|",FILTER(MIRANDA!C2:F, MIRANDA!C2:C=M2))

这将把 | 每个列项目之间的字符。更改“|” 到你想要的样子。

因此,要通过获取单元格 T 的值来完成这项工作,您需要 INDIRECT():

=join("|",FILTER(INDIRECT( T2 & "!C:F"), INDIRECT( T2 & "!C:C")=M2))

另一种选择,特别是如果您在每个选项卡中包含时间戳,将使用 vlookup 来查找时间戳列。但是,使用列 M 可能效果不佳:

=VLOOKUP(M2, INDIRECT( T2 & "!C:F"), 1, FALSE)

由于您使用的是自定义脚本,因此您也可以使用一个来复制公式,因为您不能将 arrayformula() 应用于这些方法中的任何一个。我相信有一些示例脚本可以做到这一点。问题是通过引用另一个单元格来获取范围。我知道这样做的唯一方法是使用 INDIRECT() 函数,它不支持数组。另一种选择是编写一个自定义公式,该公式返回您需要的范围值并使用数组公式。

于 2017-01-09T16:31:24.730 回答