ARRAYFORMULA 重复 VLOOKUP 的结果
ARRAYFORMULA repeating results of VLOOKUP
我被迫更改我的电子表格中的一个公式,但似乎无法让 ARRAYFORMULA
在不重复相同结果的情况下填写该列。
这是在一行中工作的代码:
=ArrayFormula(SPLIT(CONCATENATE(QUERY(coreAbilities!$A:$E,"SELECT B,C,D,E where A = '"&VLOOKUP(C2:C,unitData!$C:$D,2,)&"'",0)&":"),":"))
我试过用 VLOOKUP
包装它,但似乎什么也做不了。
基本上,我正在搜索 5 列的 table 并找到与名称匹配的名称,但是,这两个 table 之间的名称不同。我正在搜索的名称必须首先与另一个 table 和 中的 "code name" 匹配,然后 我可以搜索最后一个 table。最重要的是,每个名称都有 3-5 个匹配项,每个匹配项有 5 个值。所以简单地使用 VLOOKUP
似乎并不能解决问题。
我已经尝试了 VLOOKUP
和 FILTER
,希望自己能更轻松地完成这项工作,但这是我能够设法获得所需结果的唯一公式(至少以正确的顺序)是通过使用 QUERY
.
我并没有接受我正在使用的方法,但它已经让我走到这一步了,所以我一直在努力坚持下去。
这是my sheet
英雄!H2
QUERY
不 支持 arrays/ranges 内部的字符串参数。
唯一可能的方法是在 QUERY
中使用正则表达式功能,例如:
然而TEXTJOIN
属于一组限制为50000个字符输入的公式,例如。这不适用于您的大型阵列。因此 double VLOOKUP
是你的朋友。但正如您所注意到的,VLOOKUP
始终只能输出第一个找到的结果,而接下来的每个发现都只是第一个匹配项的 clones/repeats。
所以诀窍是在 vlooked up 值上附加一个计数器,这将强制新发现而不是克隆以前的发现:
=ARRAYFORMULA(IFERROR(VLOOKUP(COUNTIFS(IFERROR(VLOOKUP(C2:C, unitData!$C:$D, 2, 0)),
IFERROR(VLOOKUP(C2:C, unitData!$C:$D, 2, 0)), ROW(M2:M), "<="&ROW(M2:M))&
IFERROR(VLOOKUP(C2:C, unitData!$C:$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:$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)))
我被迫更改我的电子表格中的一个公式,但似乎无法让 ARRAYFORMULA
在不重复相同结果的情况下填写该列。
这是在一行中工作的代码:
=ArrayFormula(SPLIT(CONCATENATE(QUERY(coreAbilities!$A:$E,"SELECT B,C,D,E where A = '"&VLOOKUP(C2:C,unitData!$C:$D,2,)&"'",0)&":"),":"))
我试过用 VLOOKUP
包装它,但似乎什么也做不了。
基本上,我正在搜索 5 列的 table 并找到与名称匹配的名称,但是,这两个 table 之间的名称不同。我正在搜索的名称必须首先与另一个 table 和 中的 "code name" 匹配,然后 我可以搜索最后一个 table。最重要的是,每个名称都有 3-5 个匹配项,每个匹配项有 5 个值。所以简单地使用 VLOOKUP
似乎并不能解决问题。
我已经尝试了 VLOOKUP
和 FILTER
,希望自己能更轻松地完成这项工作,但这是我能够设法获得所需结果的唯一公式(至少以正确的顺序)是通过使用 QUERY
.
我并没有接受我正在使用的方法,但它已经让我走到这一步了,所以我一直在努力坚持下去。
这是my sheet 英雄!H2
QUERY
不 支持 arrays/ranges 内部的字符串参数。
唯一可能的方法是在 QUERY
中使用正则表达式功能,例如:
然而TEXTJOIN
属于一组限制为50000个字符输入的公式,例如。这不适用于您的大型阵列。因此 double VLOOKUP
是你的朋友。但正如您所注意到的,VLOOKUP
始终只能输出第一个找到的结果,而接下来的每个发现都只是第一个匹配项的 clones/repeats。
所以诀窍是在 vlooked up 值上附加一个计数器,这将强制新发现而不是克隆以前的发现:
=ARRAYFORMULA(IFERROR(VLOOKUP(COUNTIFS(IFERROR(VLOOKUP(C2:C, unitData!$C:$D, 2, 0)),
IFERROR(VLOOKUP(C2:C, unitData!$C:$D, 2, 0)), ROW(M2:M), "<="&ROW(M2:M))&
IFERROR(VLOOKUP(C2:C, unitData!$C:$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:$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)))