Google 工作表 - 查询从另一个 sheet 创建 "Master summary" 当主 sheet 设置为条件
Google Sheets - Query to create "Master summary" from another sheet when master sheet is set to condition
我在尝试编写查询时遇到了一些困难。
我有一个 Google sheet (here's a copy) 我需要为其编写查询以创建 "master summary." 有问题的列是 U 列在主选项卡上。基本上,我需要从匹配的 sheet 中导入 C D E 和 F 列,然后在列 T 中输入名称,以获得与行匹配的选定名称。
我知道我需要查询个人 sheet 并导入类似
的信息
=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。而且我相信 Google 应用程序无论如何都使用稍微修改过的版本。我做错了什么?
查询函数的第一部分是要查询的范围。第二部分是抓什么。所以我认为您可能正在寻找这个:
=QUERY(MASTER!A:T,"SELECT C,D,E,F WHERE T ='Miranda'",0)
并且您将不会收到任何列 header,因为 0 表示不要将任何行用作 header。
这将列出 C、D、E 和 F 列,其中 T 是 Miranda。
编辑:
由于您没有在每个单独的工作表中显示时间戳,因此很难获得单个匹配项,但只要表格中需要,M 列就可以相当安全地进行检查。
=FILTER(MIRANDA!C2:F, MIRANDA!C2:C=M2)
将 return 一组单元格,从 C 到 F,用于 Miranda 选项卡中匹配 M2 值的行。照原样,它会将这些放在包含公式和下 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() 函数,它不支持数组。另一种选择是编写一个自定义公式,该公式 return 是您需要的范围值并使用数组公式。
我在尝试编写查询时遇到了一些困难。
我有一个 Google sheet (here's a copy) 我需要为其编写查询以创建 "master summary." 有问题的列是 U 列在主选项卡上。基本上,我需要从匹配的 sheet 中导入 C D E 和 F 列,然后在列 T 中输入名称,以获得与行匹配的选定名称。
我知道我需要查询个人 sheet 并导入类似
的信息=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。而且我相信 Google 应用程序无论如何都使用稍微修改过的版本。我做错了什么?
查询函数的第一部分是要查询的范围。第二部分是抓什么。所以我认为您可能正在寻找这个:
=QUERY(MASTER!A:T,"SELECT C,D,E,F WHERE T ='Miranda'",0)
并且您将不会收到任何列 header,因为 0 表示不要将任何行用作 header。
这将列出 C、D、E 和 F 列,其中 T 是 Miranda。
编辑:
由于您没有在每个单独的工作表中显示时间戳,因此很难获得单个匹配项,但只要表格中需要,M 列就可以相当安全地进行检查。
=FILTER(MIRANDA!C2:F, MIRANDA!C2:C=M2)
将 return 一组单元格,从 C 到 F,用于 Miranda 选项卡中匹配 M2 值的行。照原样,它会将这些放在包含公式和下 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() 函数,它不支持数组。另一种选择是编写一个自定义公式,该公式 return 是您需要的范围值并使用数组公式。