FUNÇÃO PERSONALIZAD...
 
Notifications
Clear all

FUNÇÃO PERSONALIZADA VBA UDF SPROCV PROCV INDICE CORRESP

8 Posts
3 Usuários
0 Reactions
1,858 Visualizações
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Pessoal, bom dia.

Estou tentando criar uma UDF para usar o PROCV com ÍNDICE/CORRESP e criar um Suplemento para distribuição interna.
Acredito ser de grande ajuda para outras pessoas também.
O problema é que a Fórmula está retornando #VALOR. Alguém tem ideia do que está errado?
Gostaria também de implementar o tipo_correspondencia (1- É menor que, 0- Correspondência exata, -1 - É maior do que).

Option Explicit

'SUPER PROCV retorna PROCV exato de qualquer coluna escolhida.
Public Function SPROCV(ByVal valor_procurado As Variant, _
                        ByVal matriz_tabela As Range, _
                        ByVal matriz_referencia As Range, _
                        ByVal numero_indice_coluna As Integer) As String
                        
    Dim contLin As Long
    
    For contLin = 1 To matriz_tabela.Rows.Count
        If UCase(matriz_referencia.Cells(contLin, 1)) = UCase(valor_procurado) Then
            SPROCV = matriz_tabela.Cells(contLin, numero_indice_coluna)
            Exit For
        Else
            SPROCV = CVErr(xlErrNA)
        End If
    Next contLin
    
End Function

Créditos/adaptação : https://excelmaniacos.com/2015/08/10/udf-procvn-um-procv-para-trazer-um-resultado-de-ordem-n-esima/

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 04/10/2017 8:54 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

jonascruz,

Boa tarde!

Veja se é assim.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 04/10/2017 1:05 pm
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Wagner

Muito obrigado. Resolveu sim.
Procurei em vários foruns de VBA e não encontrei nada que fale sobre isso.

É possível incluir texto de ajuda em cada PARÂMETRO da função? Vc quando usou a função, não pegou o intervalo correto de matriz_referencia, realmente não é auto-explicativo.
E se não for complicado, acha uma boa ideia sempre travar o intervalo de matriz_tabela e matriz_referencia, independente da ação do usuário? equivalente a dar um F4.

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 04/10/2017 1:57 pm
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Criei o Suplemento. Se puderem dar o feedback, agradeço.

Função: SPROCV (Super PROCV)
Faz busca de dados como o Procv, mas a coluna procurada pode estar em qualquer coluna. Conhecido como PROCV invertido.
Autor: Jonas Cruz
Email: [email protected]
--------------------------------------------------------------

Instalação:
Salve o arquivo FuncoesPersonalizadas.xlam na pasta Documentos / Meus Documentos (do seu computador)
Com um documento qualquer aberto no Excel, clique no Menu Arquivo > Opções > Suplementos
Em Gerenciar (parte inferior), clique no botão Ir...
Na janela Suplementos, clique no botão Procurar...
Navegue até o arquivo FuncoesPersonalizadas.xlam que você salvou na pasta Documentos / Meus Documentos
Vai aparecer um novo Suplemento selecionado, clique no botão OK e volte ao Excel para testar a nova função SPROCV.

--------------------------------------------------------------

Sintaxe:
=SPROCV(valor_procurado;matriz_tabela;matriz_referencia;numero_indice_coluna)

--------------------------------------------------------------

Campos:
1) Valor Procurado: É o valor a ser localizado na coluna da tabela.
2) Matriz Tabela: É a tabela cujos dados são recuperados, podendo ser um intervalo ou nome de um intervalo. Mesmo raciocínio do intervalo do PROCV.
3) Matriz Referência: É o intervalo da coluna (em Matriz Tabela) cujos dados serão comparados com o Valor Procurado.
4) Número Índice Coluna: Número da coluna que será exibida (de acordo com Matriz Tabela). Mesmo raciocínio do índice da coluna do PROCV.

Importante***
Nos intervalos 2 e 3, você pode usar a linha de cabeçalho (títulos) da tabela ou não. Mas se usar no item 2, necessariamente tem que usar no item 3. Ou não usa em nenhum deles.

Public Function SPROCV(ByVal valor_procurado As Variant, _
                        ByVal matriz_tabela As Range, _
                        ByVal matriz_referencia As Range, _
                        ByVal numero_indice_coluna As Integer) As String
                        
    Dim contLin As Long
    
    For contLin = 1 To matriz_tabela.Rows.Count
        If UCase(matriz_referencia.Cells(contLin, 1)) = UCase(valor_procurado) Then
            SPROCV = matriz_tabela.Cells(contLin, numero_indice_coluna)
            Exit For
        Else
            If contLin = matriz_tabela.Rows.Count Then
                SPROCV = "#N/D" 'Nesse ponto está dando uma travada quando não encontra a correspondência
            End If
        End If
    Next contLin
    
End Function

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 05/10/2017 7:23 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

jonascruz,

Segue arquivo que demonstra como inserir a ajuda para as UDF. Infelizmente, não sei mais nem aonde peguei o mesmo e, portanto, não sei qual é a fonte. Veja se lhe ajuda.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 05/10/2017 11:47 am
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Muito bom, Wagner.

Encontrei esse site do autor do arquivo que vc enviou.
https://www.wizdoh.com/excel-udf-built-in-tips/
Ele criou classes para dar nomes aos textos de ajuda, é bem complexo (pelo menos pra mim).
Vou dar uma estudada e tentar fazer.

Vlw mesmo pela contribuição.

Meu objetivo é fazer um módulo com algumas funções que podem ser uteis para outras pessoas, e conforme eu for aprendendo e melhorando, vou publicando aqui no forum.

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 06/10/2017 8:14 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia,

Vê se ajuda:

Option Explicit

'SUPER PROCV retorna PROCV exato de qualquer coluna escolhida.
Public Function SPROCV(ByVal valor_procurado As Variant, _
                        ByVal matriz_tabela As Range, _
                        ByVal matriz_referencia As Range, _
                        ByVal numero_indice_coluna As Integer) As String
                       
Dim Busca   As Range

    Set Busca = matriz_referencia.Find(valor_procurado, LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not Busca Is Nothing Then
        SPROCV = matriz_tabela.Cells(Busca.Row, numero_indice_coluna)
    Else
        SPROCV = CVErr(xlErrNA)
    End If
    
End Function

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/10/2017 7:22 am
(@jonascruz)
Posts: 64
Trusted Member
Topic starter
 

Muito obrigado @bernardo @wagner.

Agora além de funcional, ficou eficiente.
Vai ajudar muita gente aqui e espero ajudar o máximo possivel.

Se a informação ou resposta foi útil, clique na mãozinha próxima ao botão "CITAR no canto superior direito.

Se o seu problema foi resolvido, clique no V verde para aceitar como resposta.

 
Postado : 09/10/2017 7:37 am