Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
Por IgorChaves 15 Abr 2019 às 16:32
Membro Novato
Mensagens: 2
Reputação: 0
#43093
Boa tarde pessoal.

Desenvolvi uma fórmula para quando filtrar o nome da pessoa em uma planilha ela me trazer os valores de salário, encargo, previdência dela automaticamente de acordo com cada filtro.

Para contextualizar:

O extrato contábil da pessoa vem dividida em eventos e cada um tem uma numeração ex:
EVENTO DESCRIÇÃO VALOR
001 salário base R$1000
.
.
070 hora extra 100% diurna R$ 456,97
.
394 inss R$ 350,98
etc

(A tabela tem mais colunas)

Minha fórmula é baseada no número do evento e quando eu filtro o nome da pessoa ela calcula o salário, encargo, previdência de acordo com a pessoa filtrada.

Porém a planilha tem mais que 80mil linhas e a fórmula eu construí de uma forma que talvez(com certeza) não seja a mais leve.
Poderiam me ajudar a melhorar a performance dela?

segue um exemplo de fórmula para trazer automaticamente o valor das horas extras. Vejam que eu não consegui fazer a fórmula de um modo para colocar os eventos de uma vez e tive que repetir as funções para cada evento relacionado com hora extra, nesse caso. Utilizei a fórmula indireto porque eu guardo essa fórmula em um arquivo separado e quando a lista do RH chega eu apenas colo esta abaixo de todos os nomes. quando não usava ela puxava as informações erradas...
Para salário, encargo etc é a mesma fórmula, só os eventos que mudam e o tamanho da fórmula também, que fica imensa.

=SOMA((SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="014")+0));(SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="018")+0));SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="020")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="030")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="031")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="037")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="039")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="051")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="064")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="065")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="067")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="068")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="070")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="071")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="090")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="091")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="092")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="101")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="107")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="112")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="187")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="247")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="252")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="253")+0);SOMARPRODUTO(SUBTOTAL(9;DESLOC($L$2;LIN(INDIRETO("Tabela1[VALOR]"))-LIN($L$2);0));(INDIRETO("Tabela1[EVENTO]")="498")+0))


Obrigado!
Avatar do usuário
Por FelipeMGarcia 15 Abr 2019 às 17:06
Excel Expert
Mensagens: 3682
Reputação: 1568
#43096
Igor, anexa um modelo da sua planilha com o resultado desejado que fica mais fácil de ajudar, para anexar, vá em + resposta, adicionar anexo.

Abraços