0
respostas

ChatGPT para criar um VBA da função PROCX

' Função PROCX - Substitui a função PROCX do Excel

Public Function PROCX(valorProcurado As Variant, matrizPesquisa As Range, matrizRetorno As Range, _
                Optional seNaoEncontrado As Variant = "Valor não encontrado", _
                Optional modoCorrespondencia As Integer = 0, _
                Optional modoPesquisa As Integer = 1) As Variant

    Dim i As Long
    Dim ultimaLinha As Long
    Dim passo As Long
    Dim valorAtual As Variant

    If matrizPesquisa.Rows.Count <> matrizRetorno.Rows.Count Then
        PROCX = "Erro: As matrizes de pesquisa e retorno não têm o mesmo tamanho!"
        Exit Function
    End If

    If modoPesquisa = 1 Then
        i = 1
        ultimaLinha = matrizPesquisa.Rows.Count
        passo = 1
    ElseIf modoPesquisa = -1 Then
        i = matrizPesquisa.Rows.Count
        ultimaLinha = 1
        passo = -1
    Else
        PROCX = "Erro: Modo de pesquisa inválido! Use 1 (cima para baixo) ou -1 (baixo para cima)."
        Exit Function
    End If

    Do While i <> ultimaLinha + passo
        valorAtual = matrizPesquisa.Cells(i, 1).Value

        Select Case modoCorrespondencia
            Case 0 ' Correspondência exata
                If valorAtual = valorProcurado Then
                    PROCX = matrizRetorno.Cells(i, 1).Value
                    Exit Function
                End If
            Case 2 ' Correspondência com curingas (usando Like)
                If valorAtual Like valorProcurado Then
                    PROCX = matrizRetorno.Cells(i, 1).Value
                    Exit Function
                End If
        End Select

        i = i + passo
    Loop

    PROCX = seNaoEncontrado

End Function

' Registrar PROCX com IntelliSense

Sub RegistrarPROCX()
    Application.MacroOptions _
        Macro:="PROCX", _
        Description:="Função personalizada que substitui o PROCX do Excel. Busca um valor na matriz de pesquisa e retorna o valor correspondente na matriz de retorno.", _
        Category:="Funções Personalizadas", _
        ArgumentDescriptions:=Array( _
            "ValorProcurado - O valor que você quer buscar na matriz de pesquisa.", _
            "MatrizPesquisa - O intervalo de células onde o valor será buscado.", _
            "MatrizRetorno - O intervalo de células que contém o valor de retorno.", _
            "SeNaoEncontrado - O valor que será retornado se não for encontrado (opcional).", _
            "ModoCorrespondencia - 0 para correspondência exata, 2 para curingas (opcional).", _
            "ModoPesquisa - 1 para pesquisar de cima para baixo, -1 de baixo para cima (opcional).")
End Sub