#google-sheets #spreadsheet #array-formulas
Вопрос:
У меня есть два набора данных:
- Набор данных 1-это данные нашего отдела продаж
- Набор данных 2-это данные нашей финансовой команды
Общим элементом между этими двумя наборами является столбец идентификатора счета (столбец A в наборе данных 1 и столбец E в наборе данных 2). Однако в наборе данных 1 эти данные хранятся в виде массива, а в наборе данных 2 каждое значение массива отображается в отдельной строке.
цель
Я хотел бы иметь возможность обогатить набор данных 2 (cols F amp; G) данными из набора данных 1, однако у меня возникают проблемы с этой работой. Я пробовал использовать =FILTER(A3:A7, REGEXMATCH(TEXT(E3, "0"), TEXT(ARRAYFORMULA(SPLIT(A3:A7, ",")), "0")))
, но это дает мне следующую ошибку: «Диапазон ФИЛЬТРА должен быть одной строкой или одним столбцом». Я понимаю, что это происходит из-за SPLIT
функции, но я не знаю, как еще это сделать.
Лист можно найти здесь.
Любая помощь очень ценится.
Ответ №1:
Я добавил новый лист («Справка Эрика») в вашу электронную таблицу с образцом. Следующая единственная формула даст все результаты для F3:G …
=ArrayFormula(IF(E3:E="",,VLOOKUP("*"amp;"%"amp;E3:Eamp;"%"amp;"*",{REGEXREPLACE("%"amp;A3:Aamp;"%","[,s]","%"),B3:C},{2,3},FALSE)))
%
Символ просто используется для «заполнения» каждого элемента из Col A и Col E чем-то уникальным, чтобы отличить поисковый запрос 1
, скажем, 14
от (т. Е. VLOOKUP
Будет выполняться поиск %1%
вместо просто 1
, который не будет найден %
и т. Д.). %
Символ не имеет особого значения; это мог быть любой уникальный символ, который, как мы были уверены, обычно не появляется в Кол А или Кол Е.
REGEXREPLACE
заменяет все запятые и пробелы этим специальным %
символом в дополнение к переднему и заднему размещению. Таким образом, Col-список, подобный 1, 14
, будет рассматриваться листами в этот момент как %1%%
.
Это *
подстановочный символ, который добавляется спереди и сзади к поисковому запросу, что позволит найти его в элементах столбца A, содержащих списки.
Возвращаются результаты из второго и третьего столбцов (например, {2,3}
) виртуального массива.
Комментарии:
1. Просто идеально @Эрик Тайлер. Большое вам спасибо 🙌 🏻
Ответ №2:
Дайте примерить-
=FILTER($B$3:$B$7,ArrayFormula(MMULT(--(SPLIT($A$3:$A$7,", ")=E3),SEQUENCE(Columns(ArrayFormula(SPLIT($A$3:$A$7,", ")))))))
Комментарии:
1. Большое вам спасибо за помощь @Harun24HR. Возможно, есть еще одна вещь, о которой я, вероятно, должен был упомянуть, а именно то, что, хотя на этом листе набор данных 1 ограничен только строками с 3 по 7, в моем реальном наборе данных 1 этот диапазон постоянно увеличивается. Я попытался переписать вашу формулу как
=FILTER($B$3:$B,ArrayFormula(MMULT(--(SPLIT($A$3:$A,", ")=E3),SEQUENCE(Columns(ArrayFormula(SPLIT($A$3:$A,", ")))))))
, но в итоге получил ошибку «ФИЛЬТР имеет несоответствующие размеры диапазона. Ожидаемое количество строк: 520, количество столбцов: 1. Фактическое количество строк: 1, количество столбцов: 1.». Вы знаете, почему?