=ARRAYFORMULA(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1,
IF(IFERROR(SPLIT(B2:B, ","))<>"",
SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"),
"select Col1,count(Col1),sum(Col2),min(Col3)
group by Col1
label count(Col1)'',sum(Col2)'',min(Col3)''"))
Отредактируйте @IMtheNachoMan, чтобы добавить подробности о том, почему / как я думаю, что приведенная выше формула работает:
split
значения в столбце B
и объединить значения в столбце C
и столбец D
с произвольным значением, которое гарантированно не будет использоваться ни в одном из столбцов - , поскольку все обернуто в
arrayformula
, каждое значение из столбца B
split получитобъединенный
- столбец разбиения
B
создаст ошибку для строк, которые не имеют значения в столбце B
- , поэтому
if
и iferror
проверит, не создаст ли разделение ошибку, и если она это сделает, то вернет null
вместо конкатенированной строки из первого маркера
- , в этот момент у нас есть по одной строке для каждогострока в исходной таблице со столбцом
B
разделена и объединена со столбцами C
и D
join
все строки, использующие второе произвольное значение, которое гарантированно не должно быть ни в одном из столбцов - обязательноигнорировать пустые значения
- там будут пустые значения из строк, в которых не было значений в разбиении от первого маркера
split
объединенных данных (который не имеет пустых строк (причина предыдущего маркера) на 2-м произвольном значении, которое использовалось transpose
, возвращая его в строки trim
в каждой строке для удаления пробелов (неконечно, как / где были добавлены пробелы) split
столбец в каждой строке с первым произвольным значением - используйте это как входные данные для вызова
query
и используйте агрегатные функциичтобы получить нужные данные
, если вам действительно нужно сохранить заказ, сделайте:
=ARRAYFORMULA(IFERROR(VLOOKUP(Sheet1!A2:A,
QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1,
IF(IFERROR(SPLIT(B2:B, ","))<>"",
SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"),
"select Col1,count(Col1),sum(Col2),min(Col3)
group by Col1
label count(Col1)'',sum(Col2)'',min(Col3)''"), {1, 2, 3, 4}, 0)))