如何在Google表格中将ARRAYFORMULA与QUERY结合使用


11

我有一个查询,需要针对列表中的每一行运行。当为单行编写时,它工作得很好:

QUERY(MaraRankData,
  "select J,I,H,G,F,E where 
    A='"&E3&"' and 
    B='"&B3&"' and 
    C="&C3&" and 
    D="&D3&"",
  0
)

根据需要输出一行数据。但是,当我将其包装在ARRAYFORMULA中时,它仍然只输出一行而不是很多行:

=ARRAYFORMULA(
  QUERY(MaraRankData,
    "select J,I,H,G,F,E where 
      A='"&E3:E&"' and 
      B='"&B3:B&"' and 
      C="&C3:C&" and 
      D="&D3:D&"",
    0)
)

Google表格不会引发任何错误,因此我不知道自己在做什么错。如何使ARRAYFORMULA与我的QUERY一起使用,这样我不必在每一行上重复公式?


为了支持关于用Arrayformula包装Query()公式的红葡萄酒评论。不必包装任何已经返回/产生数组类型结果的公式。即不要将Arrayformula应用于“过滤器”,“唯一”,“转置”等
。– Xzila

1
同样,在大多数情况下,您可以使用查询,过滤器公式也会起作用。我敢打赌,您可以通过这种方式更轻松地解决您的问题。
Xzila

@Xzila如果您有使用的方法filter,请发布答案:我会对这种解决方案感兴趣。

2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)第一部分只是重新排列大括号中的列。第二个原因是,从A到E似乎是唯一重要的列,因为B着眼于自身,C着眼于自身,等等。尽管数据集确实不错,但也许可以对此问题进行更多的解释。也许我只是不明白。
Xzila

Answers:


10

arrayformula(query(...))不支持该组合;没有query处理数组数组或执行查询字符串数组的概念。

您有两种选择:(a)query在每一行重复一次;(b)用于vlookup检索数据列,如下所述。例如:

=arrayformula(vlookup(E3:E, {A3:A, J3:J}, 2, false))

一次获取一个E3:E元素,在A列中找到该元素,然后检索J列中的相应元素。采用这种方法,您将需要六个单独的vlookup来获取J,I,H,G,F列, E,但您无需为每行单独使用命令。

一种复杂的情况是vlookup只接受一个搜索键,而您想通过4个参数进行搜索,

A='"&E3&"' and 
B='"&B3&"' and 
C="&C3&" and 
D="&D3&

可以通过将它们串联到一个搜索关键字中来解决此问题:您可以有一个列,例如Z,

=arrayformula(E3:E & "|" & B3:B & "|" & C3:C & "|" & D3:D)

将四个搜索参数连接到一个以竖线分隔的搜索关键字中。对要搜索的表执行相同的操作,然后使用来比较这些键vlookup


3
关于第一个语句,arrayformula内部的嵌套查询适用于第一个参数。见webapps.stackexchange.com/a/97658/88163
鲁本
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.