Вы можете сделать это с формулой в одной ячейке (не нужно копировать ее):
=TRANSPOSE(SPLIT(TEXTJOIN(",", FALSE, ARRAYFORMULA(IFNA(VLOOKUP(SPLIT(TEXTJOIN(",,", FALSE, $D$2:$D$5), ",", TRUE, FALSE), $A$2:$B$4, 2, 0)))), ",,", FALSE, FALSE))
![enter image description here](https://i.stack.imgur.com/vTyMJ.png)
Что именно эта формула делает, идя изнутри (от TEXTJOIN(",,", ...
до TRANSPOSE(...
):
Первый TEXTJOIN
присоединяется к диапазону Условие (D2:D4
или больше, если необходимо) в одну строку.
",,"
(точная строка из двух запятых) используется в качестве разделителя: разрешена запятая (вы уже используете ее, означает, что в столбце A2:A4
) не должно быть запятых, а две запятые можно отличить только от одной. - Пустые строки (в данном случае ячейки) исключать нельзя, поэтому результат будет выровнен с оригиналом data.
Первый SPLIT
дает список ключей, которые можно найти в A2:A4
.
- Пустые строки сохраняются, поэтому позже можно собрать все это вместе, используя
",,"
. Пустые строки теперь являются разделителями.
VLOOKUP
заменяет ключи (A2:A4
) на значения (B2:B4
)
IFNA
необходим, поэтому VLOOKUP
не захлебнется пустой строкой, переданной в качестве ключа. Пустая строка останется пустой строкой.
ARRAYFORMULA
эффективно требуется для передачи диапазона ключей (от шага 2) до VLOOKUP
вместо одной клавиши .
Second TEXTJOIN
собирает все эти значения обратно вместе.
- Пустые строки сохраняются, поскольку они являются разделителями между двумя Условия .
- Из-за пустых строк результаты для каждой строки будут разделены
",,"
(двумя запятыми).
Используется секунда SPLIT
для разделения результатов для каждой строки.
- Пустые строки сохраняются для выравнивания с исходными данными.
TRANSPOSE
просто поворачивает результат в столбец.
То же самое в удобочитаемой форме (допустимо ввести такую формулу):
=TRANSPOSE(
SPLIT(
TEXTJOIN(
",",
FALSE,
ARRAYFORMULA(
IFNA(
VLOOKUP(
SPLIT(
TEXTJOIN(
",,",
FALSE,
$D$2:$D$4
),
",",
TRUE,
FALSE
),
$A$2:$B$4,
2,
0
)
)
)
),
",,",
FALSE,
FALSE
)
)