Ao criar a solução para " Como mesclar valores de linhas em uma coluna em uma linha anterior? ", compus a fórmula:
[G11] =LET(
c,COLUMNS(Table1),
at_l,INDEX(Table1,0,c),
n,ROWS(Table1),
af,FILTER(HSTACK(Table1,SEQUENCE(n)),Table1[Product]<>"null"),
aw,DROP(VSTACK(INDEX(af,0,c+1),n+1),1),
HSTACK(
TAKE(af,,c),
BYROW(
SEQUENCE(ROWS(af)),
LAMBDA(i,
TEXTJOIN(", ",FALSE,
DROP(TAKE(at_l,INDEX(aw,i)-1),INDEX(af,i,c+1))
)
)
)
)
)
Verificar manualmente não apresenta erro, mas não funciona como mostrado abaixo:
A tabela de dados:
# | QTD. | Produto | Opção | Nome do item |
---|---|---|---|---|
1 | 3 | CHR124 | Cadeira | |
nulo | nulo | nulo | .FOC | Névoa |
2 | 1 | SFA478 | Sofá | |
nulo | nulo | nulo | .UM | UM |
nulo | nulo | nulo | .B | B |
nulo | nulo | nulo | .C | C |
nulo | nulo | nulo | .D | E |
nulo | nulo | nulo | .E | E |
nulo | nulo | nulo | .F | F |
nulo | nulo | nulo | .G | G |
nulo | nulo | nulo | .H | E |
3 | 2 | TBL8954 | Mesa | |
nulo | nulo | nulo | .EU | EU |
nulo | nulo | nulo | .J | Eu |
nulo | nulo | nulo | .K | E |
nulo | nulo | nulo | .eu | eu |
nulo | nulo | nulo | .M | M |
nulo | nulo | nulo | .N | Não |
nulo | nulo | nulo | .O | O |
nulo | nulo | nulo | .P | P |
Para depurar o problema, compus a fórmula intermediária:
[G15] =LET(
c,COLUMNS(Table1),
at_l,INDEX(Table1,0,c),
n,ROWS(Table1),
af,FILTER(HSTACK(Table1,SEQUENCE(n)),Table1[Product]<>"null"),
aw,DROP(VSTACK(INDEX(af,0,c+1),n+1),1),
HSTACK(
af,
aw
)
)
e então
[G19] =BYROW(
SEQUENCE(ROWS(G15:G17)),
LAMBDA(i,
TEXTJOIN(", ",FALSE,
DROP(TAKE(Table1[Item Name],INDEX(M15:M17,i)-1),INDEX(G15:L17,i,6))
)
)
)
o que também não funciona.
Mas pode funcionar com pequenas modificações:
[I19] =SCAN("",
SEQUENCE(ROWS(G15:G17)),
LAMBDA(a,i,
TEXTJOIN(", ",FALSE,
DROP(TAKE(Table1[Item Name],INDEX(M15:M17,i)-1),INDEX(G15:L17,i,6))
)
)
)
Mas a fórmula principal com essa modificação ainda não funciona:
=LET(
c,COLUMNS(Table1),
at_l,INDEX(Table1,0,c),
n,ROWS(Table1),
af,FILTER(HSTACK(Table1,SEQUENCE(n)),Table1[Product]<>"null"),
aw,DROP(VSTACK(INDEX(af,0,c+1),n+1),1),
HSTACK(
TAKE(af,,c),
SCAN("",
SEQUENCE(ROWS(af)),
LAMBDA(a,i,
TEXTJOIN(", ",FALSE,
DROP(TAKE(at_l,INDEX(aw,i)-1),INDEX(af,i,c+1))
)
)
)
)
)
Fiz mais modificações de depuração, mas não obtive nada no final. Até o Excel travou quando substituí TEXTJOIN por REDUCE.
Encontrei a solução para a pergunta, mas o problema descrito acima ainda me irrita.
Parece um bug do Excel, mas alguém pode comentar ou dar uma explicação?
Adicionar intersecção
@
ao índice informa ao Excel que a matriz é um único valor (mesmo que seja).