Fórmula do Excel: some cada enésima coluna -

Índice

Fórmula genérica

=SUMPRODUCT(--(MOD(COLUMN(rng)-COLUMN(rng.first)+1,n)=0),rng)

Resumo

Para somar cada enésima coluna, você pode usar uma fórmula baseada nas funções SUMPRODUCT, MOD e COLUMN.

No exemplo mostrado, a fórmula em L5 é:

=SUMPRODUCT(--(MOD(COLUMN(B5:J5)-COLUMN(B5)+1,K5)=0),B5:J5)

Explicação

No núcleo, usa SUMPRODUCT para somar valores em uma linha que foram "filtrados" usando lógica baseada em MOD. A chave é esta:

MOD(COLUMN(B5:J5)-COLUMN(B5)+1,K5)=0

Este snippet da fórmula usa a função COLUMN para obter um conjunto de números de coluna "relativos" para o intervalo (explicado em detalhes aqui) que se parece com isto:

(1,2,3,4,5,6,7,8,9)

Isso vai para o MOD assim:

MOD((1,2,3,4,5,6,7,8,9),K5)=0

onde K5 é o valor de N em cada linha. A função MOD retorna o resto para cada número de coluna dividido por N. Então, por exemplo, quando N = 3, MOD retornará algo assim:

(1,2,0,1,2,0,1,2,0)

Observe que os zeros aparecem para as colunas 3, 6, 9, etc. A fórmula usa = 0 para forçar um VERDADEIRO quando o resto é zero e um FALSO quando não, então usamos um duplo negativo (-) para forçar um VERDADEIRO e FALSE para uns e zeros. Isso deixa uma matriz como esta:

(0,0,1,0,0,1,0,0,1)

Onde 1s agora indica "enésimos valores". Isso vai para SUMPRODUCT como array1, junto com B5: J5 como array2. SUMPRODUCT então faz seu trabalho, primeiro multiplicando e depois somando os produtos das matrizes.

Os únicos valores que "sobrevivem" à multiplicação são aqueles em que array1 contém 1. Desta forma, você pode pensar na lógica de array1 "filtrando" os valores em array2.

Soma todas as outras colunas

Se você quiser somar todas as outras colunas, basta adaptar esta fórmula conforme necessário, tendo em mente que a fórmula atribui 1 automaticamente à primeira coluna do intervalo. Para somar EVEN colunas, use:

=SUMPRODUCT(--(MOD(COLUMN(A1:Z1)-COLUMN(A1)+1,2)=0),A1:Z1)

Para somar colunas ODD, use:

=SUMPRODUCT(--(MOD(COLUMN(A1:Z1)-COLUMN(A1)+1,2)=1),A1:Z1)

Artigos interessantes...