Verificar ranking dos valores que mais se repetem em determinada coluna.

Anônima
2023-03-03T19:50:22+00:00

Opa galera, boa tarde/boa noite/bom dia! (Não sei q horas verá esse post).

Tava precisando de uma fórmula/função ou código VBA para retornar os valores que mais se repetem em determinada coluna. 

Preciso fazer um ranking dos clientes que mais foram contatados durante determinado período, mostrando quantas vezes foram contatados, e dos vendedores que mais tiveram seus clientes contatados durante determinado período, quantos clientes foram, ou seja, podendo filtrar com base no periodo de outra coluna.

Quem souber responder/puder ajudar, desde já grata 😁

#help #ajuda

Microsoft 365 e Office | Excel | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

8 respostas

Classificar por: Mais útil
  1. Maison da Silva 8,146 Pontos de reputação MVP
    2023-03-04T13:27:00+00:00

    Veja se esse VBA ajuda você!

    Aqui está um exemplo de código que irá ajudá-lo a obter o ranking dos clientes mais contatados durante um determinado período. Você precisará modificar o código para adaptá-lo à sua tabela de dados, incluindo os nomes das colunas corretas.

    Sub ObterRankingClientes()

    Dim rngData As Range 
    
    Dim strDataInicial As String 
    
    Dim strDataFinal As String 
    
    Dim dictClientes As Object 
    
    Dim c As Range 
    
    Dim i As Long 
    
    'definir intervalo de dados 
    
    Set rngData = Range("A1").CurrentRegion 
    
    'definir período desejado 
    
    strDataInicial = "01/01/2023" 
    
    strDataFinal = "31/01/2023" 
    
    'criar objeto dicionário para armazenar contagem de clientes 
    
    Set dictClientes = CreateObject("Scripting.Dictionary") 
    
    'loop através dos dados e contar clientes contatados 
    
    For Each c In rngData.Rows 
    
        If c.Value >= strDataInicial And c.Value <= strDataFinal Then 
    
            If Not dictClientes.Exists(c.Offset(0, 1).Value) Then 
    
                dictClientes.Add c.Offset(0, 1).Value, 1 
    
            Else 
    
                dictClientes(c.Offset(0, 1).Value) = dictClientes(c.Offset(0, 1).Value) + 1 
    
            End If 
    
        End If 
    
    Next c 
    
    'exibir resultados em ordem decrescente 
    
    i = 1 
    
    Range("E2:F11").ClearContents 
    
    Range("E2").Value = "Clientes" 
    
    Range("F2").Value = "Contagem" 
    
    For Each Key In SortDictionaryDescending(dictClientes) 
    
        If i <= 10 Then 
    
            Range("E" & i + 2).Value = Key 
    
            Range("F" & i + 2).Value = dictClientes(Key) 
    
            i = i + 1 
    
        Else 
    
            Exit For 
    
        End If 
    
    Next Key 
    

    End Sub

    Function SortDictionaryDescending(dict As Object) As Variant()

    Dim arrKeys As Variant 
    
    Dim arrResults As Variant 
    
    Dim i As Long 
    
    Dim j As Long 
    
    Dim temp As String 
    
    'criar array com chaves do dicionário 
    
    arrKeys = dict.Keys 
    
    'ordenar chaves em ordem decrescente de valor 
    
    For i = LBound(arrKeys) To UBound(arrKeys) 
    
        For j = i + 1 To UBound(arrKeys) 
    
            If dict(arrKeys(j)) > dict(arrKeys(i)) Then 
    
                temp = arrKeys(i) 
    
                arrKeys(i) = arrKeys(j) 
    
                arrKeys(j) = temp 
    
            End If 
    
        Next j 
    
    Next i 
    
    'criar array com resultados ordenados 
    
    ReDim arrResults(0 To UBound(arrKeys)) 
    
    For i = LBound(arrKeys) To UBound(arrKeys) 
    
        arrResults(i) = arrKeys(i) 
    
    Next i 
    
    SortDictionaryDescending = arrResults 
    

    End Function

    Este código conta o número de vezes que cada cliente foi contatado durante um período específico e, em seguida, exibe os 10 clientes com mais contatos em ordem decrescente. O código também usa uma função auxiliar para classificar o dicionário em ordem decrescente de valor.

    Espero que isso ajude!

    Se alguma resposta acima lhe auxiliou, por favor, não se esqueça de marcar como "Sim A resposta resolveu o problema". Isso ajudará outros usuários que possam ter a mesma dúvida.

    Se você tiver qualquer dúvida ou precisar de mais informações, fique à vontade para entrar em contato. Obrigado pela sua confiança em nossa comunidade.

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2023-03-04T13:09:53+00:00

    O problema é que eu não tenho uma base dos clientes ou dos vendedores, pois não são fixos (Diferente dos cobradores, que são apenas 4 nomes fixos), e como eu disse, há duplicatas. São milhares de registros, ainda que eu filtre com base nos 10 primeiros ela irá me retornar valores duplicatos. Eu poderia ir na opção de deletar duplicatas, mas isso faria com que perdesse um pouco a praticidade da tabela.

    Na verdade foi erro meu, a foto que mandei deve ter causado o equivoco, perdão.

    Fazendo uma tabela dinâmica, propriamente dita e conforme na segunda imagem (Tabela azul), eu até consigo, mas os campos de filtros não ficam como eu gostaria que ficassem (Como na primeira imagem/tabela amarela).

    Esta resposta foi útil?

    0 comentários Sem comentários
  3. Maison da Silva 8,146 Pontos de reputação MVP
    2023-03-04T12:36:12+00:00

    Para obter os 10 clientes mais cobrados durante um período específico, você pode usar a função SOMASES do Excel, que permite somar valores com base em múltiplos critérios. Aqui está um exemplo de como fazer isso:

    1. Selecione as colunas que contêm as datas, os nomes dos clientes e os nomes dos vendedores na tabela de cobranças.
    2. Insira uma tabela (use o atalho Ctrl + T) para essa seleção de colunas.
    3. Adicione uma nova coluna à tabela e insira a seguinte fórmula na primeira célula da nova coluna:

    =SOMASES([Coluna de Quantidade], [Coluna de Data], ">="&DataInicial, [Coluna de Data], "<="&DataFinal, [Coluna de Vendedor], NomeVendedor, [Coluna de Cliente], NomeCliente)

    Essa fórmula soma as quantidades de cobranças em que a data está entre a DataInicial e a DataFinal, o vendedor é o NomeVendedor e o cliente é o NomeCliente. Lembre-se de substituir "Coluna de Quantidade" pela coluna que contém as quantidades de cobranças, "Coluna de Data" pela coluna que contém as datas, "Coluna de Vendedor" pela coluna que contém os nomes dos vendedores e "Coluna de Cliente" pela coluna que contém os nomes dos clientes.

    1. Copie a fórmula para as outras células da nova coluna.
    2. Selecione a tabela inteira e clique em "Classificar e Filtrar" no menu "Dados".
    3. Selecione "Classificar do maior para o menor" para classificar a tabela pelo número de cobranças em ordem decrescente.
    4. Filtrar a tabela pela coluna de data para mostrar apenas as cobranças do período desejado.
    5. O ranking dos 10 clientes mais cobrados durante o período especificado será mostrado na tabela.

    Você pode alterar os valores de DataInicial, DataFinal, NomeVendedor e NomeCliente na fórmula para filtrar por diferentes períodos e vendedores/clientes.

    Espero que isso ajude!

    Se alguma resposta acima lhe auxiliou, por favor, não se esqueça de marcar como "Sim A resposta resolveu o problema". Isso ajudará outros usuários que possam ter a mesma dúvida.

    Se você tiver qualquer dúvida ou precisar de mais informações, fique à vontade para entrar em contato. Obrigado pela sua confiança em nossa comunidade.

    Esta resposta foi útil?

    0 comentários Sem comentários
  4. Anônima
    2023-03-04T11:51:45+00:00

    Olá, bom dia. Muito obrigada pela atenção e solidariedade.

    Estou bem sim, obrigada, e você? Como está?

    Isso infelizmente não serviria para o que eu preciso. A tabela onde estão os vendedores e clientes contatados possuem MUITAS duplicatas, devido serem histórico de cobranças de anos. Cuja base de dados é atualizada frequentemente, ou seja, surgem novos contatos registrados, pois efetuados diariamente (Mais ou meno 100 por dia).

    E além disso, precisaria de uma forma em que conseguisse filtrar por período, por exemplo:

    "Quais foram os 10 clientes mais cobrados durante o mês de janeiro do ano de 2021?"

    Tentei fazer um código VBA para isso, mas não consegui retornar mais do que um valor, ou seja, apenas o que mais se repete, e não os demais. :(

    Abaixo na imagem são as tabelas que fiz. Na primeira (tabela laranja), está a quantidade de cobranças feitas por cada cobrador durante o dia 03/03/2023. Na segunda (tabela azul). está a quantidade de cobranças que cada cobrador fez ao cliente 17018 desde o dia 01/01/2023.

    Gostaria de fazer algo semelhante para os clientes mais cobrados e para os vendedores, conforme modelo da tabela amarela.

    Esta resposta foi útil?

    0 comentários Sem comentários
  5. Maison da Silva 8,146 Pontos de reputação MVP
    2023-03-04T02:22:46+00:00

    Olá, tudo bem? Seja bem-vindo(a) à Comunidade Microsoft!

    É um prazer poder ajudá-lo(a) com sua questão. Para tentarmos solucionar o problema, sugiro que siga os passos abaixo:

    Aqui está um exemplo de como fazer isso para obter o ranking dos clientes que mais foram contatados:

    1. Selecione a coluna que contém os nomes dos clientes e insira uma tabela (use o atalho Ctrl + T).
    2. Adicione uma nova coluna à tabela e insira a seguinte fórmula na primeira célula da nova coluna:

    =CONT.SE([Nome da Coluna de Clientes],[@[Nome da Coluna de Clientes]])

    Essa fórmula conta quantas vezes o nome do cliente aparece na coluna de clientes. Lembre-se de substituir "Nome da Coluna de Clientes" pelo nome da sua coluna de clientes.

    1. Copie a fórmula para as outras células da nova coluna. A tabela agora terá uma coluna que mostra quantas vezes cada cliente foi contatado.
    2. Selecione a tabela inteira e clique em "Classificar e Filtrar" no menu "Dados".
    3. Selecione "Classificar do maior para o menor" para classificar a tabela pelo número de contatos em ordem decrescente.
    4. O ranking dos clientes que mais foram contatados será mostrado na tabela.

    Para criar um ranking dos vendedores que mais tiveram seus clientes contatados, você pode usar a mesma abordagem, mas substitua a coluna de clientes pela coluna de vendedores e ajuste a fórmula e a tabela de acordo.

    Se a resposta acima lhe auxiliou, por favor, não se esqueça de marcar como "Sim A resposta resolveu o problema". Isso ajudará outros usuários que possam ter a mesma dúvida.

    Se você tiver qualquer dúvida ou precisar de mais informações, fique à vontade para entrar em contato. Obrigado pela sua confiança em nossa comunidade.

    Esta resposta foi útil?

    0 comentários Sem comentários