АРРАЙФОРМУЛА повторяет результаты ВЛООКУП - PullRequest
1 голос
/ 03 октября 2019

Я был вынужден изменить формулу в своей электронной таблице и, похоже, не могу получить 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

1 Ответ

1 голос
/ 03 октября 2019

QUERY не не поддерживает массивы / диапазоны внутри себя под строковыми параметрами.

0

единственный возможный способ - использовать возможности регулярных выражений в QUERY, например:

0

, однако TEXTJOIN относится к группе формул, которые ограничены вводом 50000 символов, например. это не будет работать с вашими массивами. поэтому double VLOOKUP ваш друг. но, как вы заметили, VLOOKUP может всегда выводить только первый найденный результат, и каждая следующая находка будет просто клоном / повтором первого совпадения.

0

, так что хитрость заключается в добавлении счетчика к значению просматриваемого вверх, которое заставит новые находки вместо клонирования предыдущих находок:

0


=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)))

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)))

0

...