Suponha que eu tenha uma lista de valores como esta:
1
2
3
4
5
6
Quero encontrar todas as combinações que envolvam membros consecutivos desta lista, por exemplo:
(
// every combination of one element
1, 2, 3, 4, 5, 6,
// every combination of two con. elements
1+2, 2+3, 3+4, 4+5, 5+6,
// every combination of three con. elements
1+2+3, 2+3+4, 3+4+5, 4+5+6,
// every combination of four con. elements
1+2+3+4, 2+3+4+5, 3+4+5+6,
// every combination of five con.elements
1+2+3+4+5, 2+3+4+5+6,
// every combination of six con. elements
1+2+3+4+5+6,
)
Como você pode ver, há n(n+1)/2
combinações assim. Qualquer fórmula do Excel que eu possa usar para encontrar isso e, idealmente, mostrá-la como uma tabela com cada combinação sendo uma linha.
Se seus números estiverem dentro do intervalo,
A1:A6
você pode usar:=TEXTSPLIT(TEXTJOIN("-",,MAP(A1:A6,LAMBDA(a,TEXTJOIN("-",,MAP(a:A6,LAMBDA(b,TEXTJOIN("+",,a:b))))))&"-"),,"-",1)
Se você não quiser usar intervalos:
=LET(n,6,s,SEQUENCE,DROP(REDUCE("",s(n),LAMBDA(a,b,TOCOL(VSTACK(a,BYROW(s(,n,b)/(s(,n,b)<=s(6)),LAMBDA(b,TEXTJOIN("+",,TOROW(b,2))))),2))),1))
Ou pulando REDUCE:
=LET(s,SEQUENCE(,6),SORT(TOCOL(TEXTAFTER(BYROW(IF(s<=TOCOL(s),"+"&s,""),CONCAT),"+",s),2)))
(Você também pode deixar de lado
SORT
se a ordem não for importante)Para retornar a soma dessas combinações em vez das combinações em si:
=--TEXTSPLIT(ARRAYTOTEXT(MAP(A3:A34,LAMBDA(a,ARRAYTOTEXT(MAP(a:A34,LAMBDA(b,SUM(a:b))))))),,",")