Notifications
Clear all

CONTAR ÚNICO COM VARIOS CRITERIOS

6 Posts
2 Usuários
0 Reactions
1,341 Visualizações
(@ftonon)
Posts: 7
Active Member
Topic starter
 

Olá pessoal, estou com problema terrível e acredito que vocês posam me ajudar. Seguinte,

tenho uma planilha com o banco de dados da empresa em .csv nesta planilha tenho informações de venda dos representantes, clientes e tudo mais desta forma:

REPRESENTANTE CLIENTE DT. CHEGADA
REPRESENTANTE 1 JOAO 07/01/2014
REPRESENTANTE 1 JOAO 15/01/2014
REPRESENTANTE 1 JOSE 21/01/2014
REPRESENTANTE 1 JOSE 22/01/2014
REPRESENTANTE 1 JOAO 01/11/2013
REPRESENTANTE 2 MARIA 24/01/2014
REPRESENTANTE 2 MARIA 24/01/2014
REPRESENTANTE 2 MARIA 24/01/2014
REPRESENTANTE 2 JOANA 25/01/2014
REPRESENTANTE 2 JOANA 26/01/2014

preciso de uma formula que conte quantos clientes o representante 1 teve a partir de uma data, (EX: clientes de 2014) irei colocar numa célula a data inicial e em outra o representante, dai uma terceira para mostrar o resultado.

em anexo tem um exemplo explicando exatamente como eu preciso.

se alguém poder ajudar eu fico muito agradecido.

 
Postado : 15/05/2014 12:43 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Tenta essa fórmula em B3:

=SOMA(SE(FREQUÊNCIA(CORRESP(INDIRETO("F"&CORRESP(B1;E1:E10000;0)&":F"&PROC(2;1/(E1:E10000=B1);LIN(E1:E10000)));INDIRETO("F"&CORRESP(B1;E1:E10000;0)&":F"&PROC(2;1/(E1:E10000=B1);LIN(E1:E10000)));0);CORRESP(INDIRETO("F"&CORRESP(B1;E1:E10000;0)&":F"&PROC(2;1/(E1:E10000=B1);LIN(E1:E10000)));INDIRETO("F"&CORRESP(B1;E1:E10000;0)&":F"&PROC(2;1/(E1:E10000=B1);LIN(E1:E10000)));0))>0;1))
 
Postado : 15/05/2014 12:55 pm
(@ftonon)
Posts: 7
Active Member
Topic starter
 

gtsalikis, A formula funcionou muito bem, como eu faria para acrescentar mais um argumento, como a data, tipo o representante 1 teve tantos clientes depois do data 01/01/2014.

Mas estou muito impressionado com a fórmula que você criou.

 
Postado : 15/05/2014 2:08 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Veja se atende:

=SOMA(SE(FREQUÊNCIA((E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0));(E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0)))>0;1))-1
 
Postado : 15/05/2014 3:42 pm
(@ftonon)
Posts: 7
Active Member
Topic starter
 

Cara, era isso mesmo que eu precisava, muito obrigado.

 
Postado : 16/05/2014 5:17 am
(@gtsalikis)
Posts: 2373
Noble Member
 

A pedido por MP, a explicação da fórmula:

=SOMA(SE(FREQUÊNCIA((E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0));(E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0)))>0;1))-1

Amigo, é um tanto complicado explicar, vou tentar detalhar, mas pode ser um pouco difícil de entender. Uma coisa que vc pode (e deve) fazer, é buscar o entendimento de cada uma das funções em separado (SOMA, SE, FREQUÊNCIA, CORRESP). Também é bom que vc acompanhe o cálcula da fórmula, selecione a célula com a fórmula, vá no menu fórmula e clique em "avaliar fórmula" e veja o passo a passo. Ou, selecione o trecho da fórmula que quer ver calculado (na barra de fórmulas), e clique em F9.

Mas, vamos lá:

Considera a função FREQUÊNCIA(), que traz a quantidade de ocorrências em uma lista (matriz).

Posso usá-la para saber, por exemplo, quantas vezes o número 2 aparece na lista {2; 3; 4; 5; 2; 1; 2}.
Mas a função trabalha com matrizes, então, eu vou procurar mais de um número, digamos, o 2 e o 3, que seriam { 2; 3}

Nesse exemplo simplificado,

A lista {2; 3; 4; 5; 2; 1; 2} seria o que eu destaquei abaixo:
=SOMA(SE(FREQUÊNCIA((E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0));(E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0)))>0;1))-1

E a lista {2; 3} seria o que eu destaquei abaixo:
=SOMA(SE(FREQUÊNCIA((E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0));(E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0)))>0;1))-1

Explicando esses trechos:

O primeiro
(E2:E11=B1)*(G2:G11>B2)*(CORRESP(F2:F11;F2:F11;0)

Esse esquema (que pode ser usado em várias funções, utiliza uma lógica booleana (verdadeiro ou falso).

Digamos que eu comparei o valor de E2 com o de B1, na forma E2=B1. O resultado seria verdadeiro ou falso. Porém, eu comparei a lista toda de E2 até E11, por isso: (E2:E11=B1).

O resultado disso seria uma sequência de verdadeiros ou falsos. Sabendo que o Excel entende verdadeiro como 1 e falso como 0, eu posso converter esses verdadeiros ou falsos em uns e zeros com uma multiplicação.

Nesse caso, pelo teu exemplo, comparando B1 (O representante procurado), com E2:E11 (A lista de representantes) vc teria:
{verdadeiro; verdadeiro; verdadeiro; verdadeiro; verdadeiro; falso; falso; falso; falso; falso}.

E, comparando B2 (a data procurada), com G2:G11 (A lista de datas) usando o sinal "maior que" > teria:
{verdadeiro; verdadeiro; verdadeiro; verdadeiro; falso; verdadeiro; verdadeiro; verdadeiro; verdadeiro}.

como multipliquei um pelo outro, eu teria o seguinte:

{1; 1; 1; 1; 1; 0; 0; 0; 0; 0} * {1; 1; 1; 1; 0; 1; 1; 1; 1; 1}

Sendo que o resultado disso seria:

{1; 1; 1; 1; 0; 0; 0; 0; 0; 0}

Ou seja, até ai, eu tenho apenas os ítens que se referem ao representante procurado, dentro da data especificada.

mas tem a parte do CORRESP(). Esta fórmula busca a informação, que no caso é o nome do cliente, e retorna a posição dele na lista (em F2:F11).
Mas, como eu preciso buscar todos os clientes, é um truque, na verdade. Isso porque o CORRESP sempre retorna o primeiro valor, assim, se JOSÉ aparece na linha 2 e 5, em ambas as linhas ele vai retornar 2. Esse truque "converte" os nomes em um número, hehe.

No caso, para os nomes, eu teria a matriz:
{1; 1; 3; 3; 1; 6; 6; 6; 9; 9}

Que, multiplicada, fica:
{1; 1; 1; 1; 0; 0; 0; 0; 0; 0} * {1; 1; 3; 3; 1; 6; 6; 6; 9; 9}

Ou seja:
{1; 1; 3; 3; 0; 0; 0; 0; 0; 0} que é a minha lista com números que eu quero contar a frequência.

Como vc deve ter notado, os 2 trechos que eu destaquei em vermelho na fórmula são o mesmo, o que significa que eu estou buscando a frequência dos {1; 1; 3; 3; 0; 0; 0; 0; 0; 0} (que são, na verdade os numeros {0; 1; 3} repetidos. Ou seja, se vc contar, terá:

2x o número 1
2x o número 3
5x o número 0

O que dá como resultado da fórmula FREQUÊNCIA: {2; 2; 5}

Aí é onde entra a função SE()

Ela vai avaliar o que for maior que 0. se for maior que zero, será 1, senão, será 0. Assim, converte a matriz: {2; 2; 5} para {1; 1; 1}.

Depois disso, é que utilizo a função SOMA().

Ela vai somar {1; 1; 1}, ou seja, o resultado é 3.

Ai tem outro porém, o último "1" dessa lista acima se refere à contagem dos zeros. Lembra que eu falei acima que os zeros são representação do falso? Então, esse 1 não pode estar na contagem, por isso aquele "-1" no final da fórmula.

É isso.

 
Postado : 21/05/2014 3:01 pm