Estou tentando usar o Excel para contar a soma das três entradas anteriores por cada célula da segunda linha, "indexadas" pelo BOOL na primeira linha.
Eu esperava usar offset em vez de um filtro, mas aparentemente é impossível usá-lo.
Agora estou pensando em usar SOMASE e diferenças de somas parciais, mas gostaria de encontrar uma maneira mais fácil.
A saída deve ser a 3ª linha.
Obrigado
0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
17 | 4 | 0 | 44 | 6 | 0 | 87 | 45 | 36 | 8 | 0 | 1 | 39 | 39 | 41 | 30 |
0 | 0 | 0 | 0 | 48 | 48 | 44 | 44 | 44 | 80 | 80 | 80 | 37 | 76 | 79 | 119 |
Aqui
A1:P1
está mapeado comox
eA2:P2
comoy
.c
é usado como uma função, que requer entradae
e pegará apenas a última linha deA1:[input range offset -1 column]
significando que se a entrada for,y
ela retornaria o intervalo até a coluna da entrada. Por exemplo, sey
for emE2
e(y)
retornariaTAKE(A1:D2,-1)
Em seguida,
d
combinamosTOCOL(c(y)/c(x),2)
onde os valores dey
até a coluna anterior são divididos por valores dex
até a coluna anterior. Onde qualquer0
emx
forçaria um erro #DIV/0. OTOCOL
argumento2
ignora esses valores de erro.Existe a possibilidade de que
d
ainda não consista em 3 registros, portanto BOOLEAN deROWS(d)=3
é multiplicado porSUM(d)
Ou uma solução não-LAMBDA:
Não é o melhor, mas. Fórmula em
B3
arrastado para a direita:Resultado:
Aqui está uma fórmula de vazamento, mas muito mais longa
Eu poderia ter usado Take em vez de a1:index...
Você pode usar
Outra abordagem é usar
SCAN
umaLAMBDA
função personalizada para armazenar uma contagem booleana em execução, mais os últimos 3 valores "sinalizados" em cada iteração e, em seguida,MAP
chamarSUM
os resultados:Pode parecer muito, mas sem o fardo adicional de ter que fazer isso
FILTER
em cada iteração, ele permanecerá relativamente eficiente em um conjunto de dados maior (embora não tão rápido quantoMMULT
a solução de @Pb).