Google Sheets QUERY 函数:按名称选择列

Cat*_*lyx 3 lambda select filter google-sheets google-query-language

我有一个 Google 表格,其命名范围超出了 AZ 列。名称范围有标题行。我想使用该QUERY函数通过标题标签选择列。

我的公式是这样的:

=QUERY(NamedRange,"SELECT AZ, AX, BM where BB='student' ORDER BY BM DESC",1)
Run Code Online (Sandbox Code Playgroud)

StackOverflow 上其他问题的答案(例如此处接受的问题)尚未奏效。在 Google 支持页面上找到的另一个答案不适用于 Z 以外的列。

如何使用该QUERY函数并通过标题标签选择 AA 列之外的列?

期望的输出/样本数据

在此输入图像描述

可以在此处找到具有所需输出的示例电子表格。

pla*_*er0 5

您可以转置它,标题行变成一列。然后:

=TRANSPOSE(QUERY(TRANSPOSE(A1:C), "where Col1 matches 'bb header|student'", ))
Run Code Online (Sandbox Code Playgroud)

其中 A1:C 是您的命名范围(包括标题行)

在此输入图像描述


更新:

=QUERY({AI1:AK6}, "select Col2,Col3 where Col1='Jones'", 1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

动态地:

=LAMBDA(p, t, s, QUERY({AI1:AK6}, 
 "select Col"&t&",Col"&s&" 
  where Col"&p&"='Jones' 
  order by Col"&t&" desc", 1))
 (MATCH("principal", AI1:AK1, ), 
  MATCH("teacher",   AI1:AK1, ), 
  MATCH("student",   AI1:AK1, ))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


为什么选择 Lambda?

LAMBDA是一个常规 GS 函数,允许用自定义字符串替换任何类型的范围。简单 lambda 的通用示例:=LAMBDA(x, x+5)(A1)这是旧术语:=A1+5因此您可以将其理解为x的占位符A1。再举一个例子:=IF((A1+1)>(B1+1), B1+1-A1+200, B1+1*A1+20)包含大量重复的单元格引用,因此我们可以像这样重构它:=LAMBDA(a, b, IF((a+1)>b, b-a+200, b*a+20))(A1, B1+1)这对于更高级的公式堆叠特别方便,我们可以将其包装在 Lambda 中以缩短它并使其更清晰,而不是多次重复整个 fx

在此输入图像描述

你可以拥有任意数量的 LAMBDA:

在此输入图像描述

在此输入图像描述

在这里,只是为了好玩,再举一个例子......用 lambda:

在此输入图像描述

没有 lambda:pastebin.com/raw/BREgC9La

在此输入图像描述

(来自:stackoverflow.com/a/74380299/5632629