VBA – Somando apenas as células visíveis no AutoFiltro

Dois dos recursos mais poderosos do Excel infelizmente não conseguem trabalhar bem juntos.

O problema reside no fato de que a função SOMA compreende um range de células e inclui em sua soma todo o intervalo. Por exemplo, você possui uma planilha que abrange da linha 2 a linha 50. Aplica uma fórmula SOMA, por exemplo, na coluna C, o que geraria o seguinte:

=SOMA(C2:C50)

Se aplicar um AutoFiltro nesta planilha, perceberá que sua fórmula continua considerando todas as linhas, mesmo as que não estão visíveis. Dependendo da situação, isso pode ser um problema. Não há funções tradicionais para resolvê-lo, porém, uma macro pode ajudar.

Copie e cole esta função personalizada em um módulo VBA.

Function Soma_Celulas_Visiveis(Cells_To_Sum As Object)
    Application.Volatile
    For Each cell In Cells_To_Sum
        If cell.Rows.Hidden = False Then
            If cell.Columns.Hidden = False Then
                Total = Total + cell.Value
            End If
        End If
    Next
    Soma_Celulas_Visiveis = Total
End Function

Agora, substitua a função citada acima pela seguinte:

=Soma_Celulas_Visiveis(C2:C50)

Ou adapte ao range da sua planilha. Agora, aplique o autofiltro de forma que algumas linhas fiquem escondidas. Note que a função considera apenas as células que estão visíveis agora.

Explicando

O segredo da função acima está na seguinte linha:

If cell.Rows.Hidden = False Then

Essa linha verifica se a linha da célula corrente está oculta ou não (propriedade Hidden). Quando o filtro é aplicado, as linhas que não obedecem aos critérios do filtro ficam no estado de Hidden = True.

Espero que a dica seja de grande ajuda.

Bom proveito!

Download da Planilha de exemplo

http://www.tomasvasquez.com.br/downloads/Soma_Celulas_Visiveis.zip

Referências

http://support.microsoft.com/?scid=kb%3Ben-us%3B150363&x=10&y=14

Comentários

comentários