我被迫更改电子表格中的公式,并且在没有重复相同结果的情况下似乎无法让ARRAYFORMULA
来填充列。
以下是可在一行中运行的代码:
=ArrayFormula(SPLIT(CONCATENATE(QUERY(coreAbilities!$A$2:$E,"SELECT B,C,D,E where A = '"&VLOOKUP(C2:C,unitData!$C$2:$D,2,)&"'",0)&":"),":"))
我曾尝试将其包装在VLOOKUP
中,但似乎没有任何事情可以完成。
基本上,我正在搜索5列的表并找到与名称的匹配项,但是,这两个表之间的名称不同。我要搜索的名称必须首先与另一个表中的“代码名称”匹配,然后然后我可以搜索最终表。最重要的是,每个名称都有3-5个匹配项,每个都有5个值。因此,仅使用VLOOKUP
似乎并不能解决问题。
我已经尝试过VLOOKUP
和FILTER
,以期使自己更轻松,但是我可以设法(至少以正确的顺序)获得所需结果的唯一公式是:使用QUERY
。
我还没有嫁给我正在使用的方法,但是到目前为止,它已经使我迷住了,所以我一直试图将其强制通过。
这里是my sheet 英雄!H2
答案 0 :(得分:1)
QUERY
本身在字符串参数下不支持数组/范围。
唯一可能的方法是在QUERY
中使用正则表达式功能,例如:
但是TEXTJOIN
属于一组限制为50000个字符输入的公式,例如。这不适用于您的大型阵列。因此,双VLOOKUP
是您的朋友。但是您注意到VLOOKUP
始终只能输出第一个找到的结果,而每个下一个发现将只是第一个匹配项的克隆/重复。
所以诀窍是在vlookup的值后面附加一个计数器,该计数器将强制执行新的查找,而不是克隆先前的查找:
=ARRAYFORMULA(IFERROR(VLOOKUP(COUNTIFS(IFERROR(VLOOKUP(C2:C, unitData!$C$2:$D, 2, 0)),
IFERROR(VLOOKUP(C2:C, unitData!$C$2:$D, 2, 0)), ROW(M2:M), "<="&ROW(M2:M))&
IFERROR(VLOOKUP(C2:C, unitData!$C$2:$D, 2, 0)),
{COUNTIFS(coreAbilities!A2:A, coreAbilities!A2:A, ROW(coreAbilities!A2:A), "<="&
ROW(coreAbilities!A2:A))&coreAbilities!A2:A, coreAbilities!B2:E}, {2,3,4,5}, 0)))
=ARRAYFORMULA(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(SPLIT(IFERROR(VLOOKUP(
IFERROR(VLOOKUP(C2:C, unitData!$C$2:$D, 2, 0)),
SPLIT(TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({coreAbilities!A2:A&"♦",
"♠"&coreAbilities!B2:B&"♠"&coreAbilities!C2:C&"♠"&coreAbilities!D2:D&"♠"&coreAbilities!E2:E,
coreAbilities!C2:C}, "select Col1,max(Col2) group by Col1 pivot Col3", 0),
"offset 1", 0)),,999^99)), "♦"), 2, 0)), "♠"))), "offset 1", 0)))