使用ARRAYFORMULA从查找表中查找源表中的所有匹配行/值

时间:2020-07-26 21:31:45

标签: google-sheets google-sheets-formula transpose array-formulas google-sheets-query

我有一个像这样的源表。如您所见,每个Lookup Value可以有一个或多个Result

| Lookup Value | Result |
|--------------|--------|
| a            | a1     |
| a            | a2     |
| a            | a3     |
| b            | b1     |
| b            | b2     |
| c            | c1     |
| c            | c2     |

然后我有一个像这样的输入表:

| queries | results |         |         |         |         |         |
|---------|---------|---------|---------|---------|---------|---------|
| a       | ...     | ...     | ...     | ...     | ...     | ...     |
| c       | ...     | ...     | ...     | ...     | ...     | ...     |

每行的...应该是查找表中的转置值。因此,例如,上表如下所示:

| queries | results |    |    |
|---------|---------|----|----|
| a       | a1      | a2 | a3 |
| c       | c1      | c2 |    |

现在我必须像这样使用多个公式:

enter image description here

我正在尝试用单个ARRAYFORMULA替换它,但似乎不起作用。

enter image description here

还有另一种方法吗?基本上是从查找表中查找所有匹配的行,然后转置它们?

2 个答案:

答案 0 :(得分:1)

假设您的“查找值”和“结果”数据从A1:B运行(带有A1和B1中的标头)。并假设您的“查询”列表位于D1:D中(D1中的标题),而E1中具有“结果”标题。

取决于B:B中A:A中任何值的最大可能匹配数,您可以在E2中使用它:

=ArrayFormula(IFERROR(VLOOKUP(D2:D,QUERY(FILTER({A2:B,COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A))},A2:A<>""),"Select Col1, MAX(Col2) Group By Col1 Pivot Col3"),SEQUENCE(1,10,2),0)))

如果最大可能匹配项小于10或大于10,请随时相应地编辑SEQUENCE函数的第二个参数。

理解,使用要求处理范围的数组公式,您将无法将其他数据放在要求数组公式的“查询和结果”下方或右侧的任何位置评估或填补。因此,如果要在其下提供数据,则需要将VLOOKUP从D2:D限制为D2:D50(或任何最大查询范围)。同样,如果SEQUENCE函数的第二个参数为10,则将“保留” 10列(即E:N)以获得可能的结果,并且您将无法在其中放置数据,否则将“中断” ”数组公式。在这种情况下,您可能想给自己划定保留区域以供公式使用的某种视觉界线(例如,更改块的背景色或在其周围放置边框等)。

答案 1 :(得分:0)

尝试:

.so is 64-bit instead of 32-bit

0