我被迫更改电子表格中的公式,似乎无法让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
。
我没有和我所用的方法结婚,但它已经让我走到了这一步,所以我一直试图强迫它通过。
这是我的床单英雄!H2
发布于 2019-10-03 11:37:45
QUERY
不支持,而不支持字符串参数内的数组/ranges。
唯一可能的方法是在QUERY
中使用regex功能,例如:
然而,TEXTJOIN
属于一组限制于50000字符输入的公式,例如。这不适用于你的大型阵列。因此,双VLOOKUP
是你的朋友。但是,正如您注意到的,VLOOKUP
总是只能输出第一个找到的结果,而每一个下一个发现都只是第一个匹配的克隆/重复。
因此,诀窍是在vlooked值后面添加一个计数器,这将强制进行新的查找,而不是克隆以前的发现:
=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)))
https://stackoverflow.com/questions/58211328
复制相似问题