Notifications
Clear all

PROCV com valores repetidos

15 Posts
1 Usuários
0 Reactions
8,089 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia.
Estou com o seguinte problema preciso fazer um gráfico com as dez máquinas que mais sofreram reparação, usei a formula MAIOR;1 a MAIOR;10 e consegui os dez maiores valores, porém houveram alguns valores repetidos e quando tempo buscar a máquina o excel me retorna a primeira máquina que tem o valor repetido.
Veja abaixo: Os valore 32 e 28 se repetem e o excel busca a maquina referente ao primeiro valor em todas as formulas que tentei.
Obs: Seu eu classificar fica na ordem para gerar o gráfico, mas a planilha será atualizada por funcionários que não têm habilidade no excel, então gostaria que a formula fizesse a apuração sem ter que classificar as colunas, por isso estou pedindo ajuda.

QTD MAQUINAS RESULTADO FORMULAS USADAS
35 CAF961502094 CAF961502094 ÍNDICE($A$2:$B$85;CORRESP(F2;$A$2:$A$85;0);2)
33 CAF001500572 CAF001500572 PROCV(F2;A2:B85;2;0)
32 CAF951500464 CAF951500464 DESLOC($A$1;CORRESP(MAIOR($A$2:$A$85;9);$A$2:$A$85;0);1)
32 CAF3316027048 CAF951500464
32 CAF011500669 CAF951500464
31 CAF3316027046 CAF3316027046
30 CAF981500921 CAF981500921
28 CAF911500389 CAF911500389
28 CAF3316017014 CAF911500389
27 CAF3316027023 CAF3316027023

Desde já agradeço a ajuda.

 
Postado : 27/07/2010 11:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Usando a função ORDEM() em uma coluna auxiliar fica fácil e AUTOMATICO!!!

dei uma embaralhada nos valores pra mostrar como funfa!!!

 
Postado : 27/07/2010 3:57 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Leonardo, obrigado pela atenção.

Enquanto aguardava a resposta de alguém, fui estudando novas fórmulas e descobri uma que me deu o resultado esperado também, foi a seguinte:
Na coluna A se encontram as quantidades de manutenção, na coluna B as máquinas "CAF", na coluna F a formula MAIOR para ordenar as quantidades.
Para o primeira máquina usei =PROCVVARIOS(F2;$A$2:$A$85;$B$2:$B$85;1) e supondo que não haverá mais de três valores repetidos para as demais, eu usei =SE(E(F3=F1;F3=F2);PROCVVARIOS(F3;$A$2:$A$85;$B$2:$B$85;3);SE(F3=F2;PROCVVARIOS(F3;$A$2:$A$85;$B$2:$B$85;2);PROCVVARIOS(F3;$A$2:$A$85;$B$2:$B$85;1))).

Testei a sua fórmula e funcionou também.
Percebi através de outras respostas suas que você tem muita familiaridade com as Funções ÉERROS, CORRESP, LIN e INDICE e me senti motivado a estudá-las.
Valeu amigo.

 
Postado : 28/07/2010 9:04 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

rogovi, por favor poderia explicar como funciona esse procvvarios.

já criei o suplemento e abri, poderia me exclicar como funciona essa função?

procvvarios do meu suplemento está correto: ?

Function PROCVVARIOS(NomePesquisa As String, IntervaloPesquisa As Range, IntervaloRetorno As Range, Ocorrencia As Integer)
Dim Nome
Dim k As Integer, i As Integer
Application.Volatile
k = 1
i = 1
For Each Nome In IntervaloPesquisa
If Nome = NomePesquisa Then
If k = Ocorrencia Then PROCVVARIOS = IntervaloRetorno(i, 1)
k = k + 1
End If
i = i + 1
Next Nome
End Function

 
Postado : 29/07/2010 4:56 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite pessoal, criei um artigo explicando como fazer isso, no caso utilizei uma fórmula matricial:

http://excelavancado.wordpress.com/2010 ... atriciais/

At.

Marcos Rieper

 
Postado : 29/07/2010 7:50 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Veja se torna mais claro o uso da função: http://goo.gl/khIG
[ ]s

 
Postado : 29/07/2010 7:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Adilson,

Genial essa funçãoo muitooo legal mesmo! Seria possivel modificar essa função do PROCV Turbinado para retornar todos os valores de um critério um e baixo do outro.?
O Leonardo fez uma formula matricial Enorme..rs mas funciona, será que seriam possivel traduzir essa mês formula para um função?

 
Postado : 10/08/2010 5:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Adilson,

Não querendo me meter, mas dá pra fazer de retornar os valores das ocorrências um abaixo do outro sim, vou ver se faço em casa, agora estou no trabalho.

Abaixo eu comentei o ótimo código do Leonardo e tomei a liberdade de fazer uma modificação para que saia do loop assim que encontrar a ocorrência, espero não estar me metendo :?

Function PROCVVARIOS(NomePesquisa As String, IntervaloPesquisa As Range, IntervaloRetorno As Range, Ocorrencia As Integer)
    
    Dim Nome
    Dim k As Integer, i As Integer
    
    'Recalcula a função em qualquer alteração da planilha
    Application.Volatile
    
   'Inicia as variáveis
    k = 1
    i = 1

   'Faz um loop por todo o intervalo de pesquisa
    For Each Nome In IntervaloPesquisa
    
         'Se o conteúdo da célula for igual ao valor pesquisado entra nesta condição
        If Nome = NomePesquisa Then
        
           'Se o valor pesquisado for do mesmo número de ocorrência definido na função, irá retornar o valor.
            If k = Ocorrencia Then
                PROCVVARIOS = IntervaloRetorno(i, 1)
                
                'Alteração para sair da função assim que localizar o valor
                GoTo Sair
            End If
            
            'Conta a ocorrência da localização do valor
            k = k + 1
        End If
        
        'Passa para a próxima linha no Range IntervaloRetorno
        i = i + 1
    
    'Passa para a próxima célula
    Next Nome
    
Sair:
    Exit Function
End Function

Abraço, assim que eu fizer eu posto a função aqui.

 
Postado : 10/08/2010 11:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá, Rieper.
Toda contribuição é bem vinda, meu caro.
[] s

 
Postado : 10/08/2010 7:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ok
RIeper fico no aguardoo!!

Valeuu

 
Postado : 11/08/2010 9:16 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá amigos,

Infelizmente me deparei com algo que parece uma limitação no uso de funções que eu não conhecia, mas faz sentido.

Não consigo alterar o conteúdo de uma célula que não a própria que chama a função.

Para testar utilizei a função:

Function Teste()
    Cells(1, 1) = "teste"
End Function

Digitando =Teste() em qualquer célula que não obviamente a célula A1, e deu o erro de #VALOR!.

Eu até fiz como funcionaria a função, mas infelizmente não funcionará:

Function PROCVVARIOSCEL(ByVal NomePesquisa As String, _
                        ByVal IntervaloPesquisa As Range, _
                        ByVal IntervaloRetorno As Range, _
                        ByVal Ocorrencia As Long)
   
    Dim Nome
    Dim k As Integer, i As Integer
    Dim lRange As Range
    

   
    'Recalcula a função em qualquer alteração da planilha
    Application.Volatile
   
   'Inicia as variáveis
    k = 1
    i = 1

   'Faz um loop por todo o intervalo de pesquisa
    For Each Nome In IntervaloPesquisa
   
         'Se o conteúdo da célula for igual ao valor pesquisado entra nesta condição
        If (Nome = NomePesquisa) Then
            If k = 1 Then
                PROCVVARIOSCEL = IntervaloRetorno(i, 1)
            Else
                ActiveCell.Offset(k - 1, 0).Select = IntervaloRetorno(i, 1)
            End If
            
            If Ocorrencia = k Then GoTo Sair
            
            'Conta a ocorrência da localização do valor
            k = k + 1
        End If
       
        'Passa para a próxima linha no Range IntervaloRetorno
        i = i + 1
   
    'Passa para a próxima célula
    Next Nome
   
Sair:
    Exit Function
End Function

A solução para isso é só usando Sub pra fazer isso e fazendo a entrada de dados em células definidas ou usando uma form, mas daí é mais fácil fazer de outra forma.

Vou pensar em algo, e se alguém souber como contornar para referenciar células diferentes á partir de uma função, por favor me avise.

 
Postado : 11/08/2010 9:16 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Como não deu pra fazer na própria função eu criei uma encadeada usando a função do Leonardo, conforme o exemplo que pode ser baixado em: http://uploaddearquivos.com.br/download/PROCVVARIOSCEL.xlsm.

Mas ainda, se alguém conseguir fazer uma função alterar o conteúdo de outras células por favor avise, mas acredito que não dá.

 
Postado : 11/08/2010 9:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Iae Rieper,

Não conseguiu fazer a function?

 
Postado : 23/08/2010 7:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Caio,

Não, infelizmente a função chamada pelo Excel não pode alterar o conteúdo de outras células, conforme descrevi anteriormente.

O jeito é usar funções encadeadas mesmo mesmo http://uploaddearquivos.com.br/download ... OSCEL.xlsm.

At.

 
Postado : 23/08/2010 7:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Desculpa upar o tópico, mas Leonardo, você ainda tem o exemplo usando a função ordem pra trazer o procv com valores repetidos?

Não consigo mais ver o anexo.

Obrigado.

 
Postado : 27/06/2012 3:09 pm