в небольшом масштабе:
=ARRAYFORMULA(TRANSPOSE(SPLIT(TEXTJOIN("\", 1,
IF(B3:F6="y", REPT(A3:A6&", "&B2:F2&"\", MMULT(N(G3:I6="y"),
TRANSPOSE(COLUMN(G2:I2)^0))), )), "\"))&", "&
TRANSPOSE(SPLIT(JOIN(" ", REPT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
IF(G3:I6="y", G2:I2, )),, COLUMNS(IF(G3:I6="y", G2:I2, )))))&" ",
MMULT(N(B3:F6="y"), TRANSPOSE(COLUMN(B3:F6)^0)))), " ")))
только для комбинации из двух:
=ARRAYFORMULA(QUERY(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(
IF(B3:F="y", "♦"&A3:A&", "&B2:F2&"♦", ),,99^99)),,99^99), "♦")),
"where not Col1 starts with ' ' order by Col1"))
Модифицированная формула @MK для mimi c CSV:
=ARRAYFORMULA(TRANSPOSE(QUERY(TRANSPOSE(QUERY(VLOOKUP(SEQUENCE(4*5*3, 1, 0)/(5*3)+3,
{ROW(A:A), A:A&",", IF(B:I="y", {B2:F2&",", G2:I2}, )},
INT(MOD(SEQUENCE(4*5*3, 1, 0), {9^99, 5*3, 3})/{9^99, 4, 1})+{2, 3, 3+4}),
"where Col2<>'' and Col3<>''")),,9^99)))