Fórmula do Excel: contar linhas visíveis apenas com critérios -

Fórmula genérica

=SUMPRODUCT((range=criteria)*(SUBTOTAL(103,OFFSET(range,rows,0,1))))

Resumo

Para contar as linhas visíveis apenas com critérios, você pode usar uma fórmula bastante complexa baseada em SUMPRODUCT, SUBTOTAL e OFFSET. No exemplo mostrado, a fórmula em C12 é:

=SUMPRODUCT((C5:C8=C10)*(SUBTOTAL(103,OFFSET(C5,ROW(C5:C8)-MIN(ROW(C5:C8)),0))))

Prefácio

A função SUBTOTAL pode facilmente gerar somas e contagens para linhas ocultas e não ocultas. No entanto, ele não é capaz de lidar com critérios como CONT.SE ou SOMASE sem alguma ajuda. Uma solução é usar SUMPRODUCT para aplicar a função SUBTOTAL (via OFFSET) e os critérios. Os detalhes dessa abordagem são descritos a seguir.

Explicação

Basicamente, essa fórmula funciona configurando dois arrays dentro do SUMPRODUCT. A primeira matriz aplica critérios e a segunda matriz lida com a visibilidade:

=SUMPRODUCT(criteria*visibility)

Os critérios são aplicados com parte da fórmula:

=(C5:C8=C10)

O que gera uma matriz como esta:

(FALSE;TRUE;FALSE;TRUE)

Onde TRUE significa "atende aos critérios". Observe que, como estamos usando multiplicação (*) nesta matriz, os valores TRUE FALSE serão automaticamente convertidos em 1's e 0's pela operação matemática, então terminamos com:

(0;1;0;1)

O filtro de visibilidade é aplicado usando SUBTOTAL, com a função número 103.

SUBTOTAL é capaz de excluir linhas ocultas ao executar cálculos, então podemos usá-lo neste caso para gerar um "filtro" para excluir linhas ocultas dentro de SUMPRODUCT. O problema, porém, é que SUBTOTAL retorna um único número, enquanto precisamos de uma matriz de resultados para usá-lo com sucesso dentro de SUMPRODUCT. O truque é usar OFFSET para alimentar SUBTOTAL uma referência por linha, de modo que OFFSET retorne um resultado por linha.

Claro, isso requer outro truque, que é dar a OFFSET um array que contém um número por linha, começando com zero. Fazemos isso com uma expressão construída na função ROW:

=ROW(C5:C8)-MIN(ROW(C5:C8)

que irá gerar uma matriz como esta:

(0;1;2;3)

Em resumo, a segunda matriz (que lida com a visibilidade usando SUBTOTAL), é gerada assim:

=SUBTOTAL(103,OFFSET(C5,ROW(C5:C8)-MIN(ROW(C5:C8)),0)) =SUBTOTAL(103,OFFSET(C5,(0;1;2;3),0)) =SUBTOTAL(103,("East";"West";"Midwest";"West")) =(1;0;1;1)

E, finalmente, temos:

=SUMPRODUCT((0,1,0,1)*(1;0;1;1))

Que retorna 1.

Critérios múltiplos

Você pode estender a fórmula para lidar com vários critérios como este:

=SUMPRODUCT((rng1=criteria1)*(rng2=criteria2)*(SUBTOTAL(103,OFFSET(rng,rows,0,1))))

Somando os resultados

Para retornar uma soma de valores em vez de uma contagem, você pode adaptar a fórmula para incluir um intervalo de soma:

=SUMPRODUCT(criteria*visibility*sumrange)

Os critérios e matrizes de visibilidade funcionam da mesma forma explicada acima, excluindo células que não são visíveis. Se precisar de correspondência parcial, você pode construir uma expressão usando ISNUMBER + SEARCH, conforme explicado aqui.

Bons links

Discussão MrExcel, com Mike Girvin e Aladin Akyurek Mike Girvin's Magic Trick 1010

Artigos interessantes...