我有一个像这样的源表。如您所见,每个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 | |
现在我必须像这样使用多个公式:
我正在尝试用单个ARRAYFORMULA
替换它,但似乎不起作用。
还有另一种方法吗?基本上是从查找表中查找所有匹配的行,然后转置它们?
答案 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)