Recrear VLOOKUP

La función VLOOKUP de Excel es una herramienta muy conveniente para buscar valores específicos y recuperar datos relacionados. Sin embargo, al usar VBA (Visual Basic for Applications), puedes realizar búsquedas de datos aún más flexibles y automatizadas. Este artículo proporciona una explicación detallada de cómo implementar operaciones similares a VLOOKUP usando VBA.

Estructura básica de la función VLOOKUP

Primero, repasemos la función VLOOKUP de Excel.

Sintaxis_de_la_función_VLOOKUP
=VLOOKUP(valor_buscado, matriz_tabla, núm_índice_col, [ordenado])

Por ejemplo, para buscar un valor en la celda A1 dentro del rango B1:C10 y devolver el valor de la 2ª columna (columna C) de esa fila cuando se encuentre:

Ejemplo_de_VLOOKUP
=VLOOKUP(A1, B1:C10, 2, FALSE)

Usando VLOOKUP en VBA

Todas las funciones de Excel se pueden usar en VBA, por lo que puedes llamar a la función VLOOKUP que se ejecuta en Excel desde VBA.

Llamando_VLOOKUP_desde_VBA
Application.WorksheetFunction.VLookup(valor_buscado, matriz_tabla, núm_índice_col, False)

Al llamar a la función Vlookup definida en la clase WorksheetFunction, puedes usar la función VLOOKUP desde VBA.

Sin embargo, cuando deseas realizar búsquedas de datos más flexibles, crear una función personalizada en VBA es útil. La siguiente sección introduce cómo crear una función personalizada en VBA que tiene una funcionalidad similar a la función VLOOKUP.

Código para recrear VLOOKUP en VBA

A continuación, te mostraré cómo realizar la misma operación en VBA.

Function CustomVlookup(lookup_value As Variant, table_array As Range, col_index_num As Integer) As Variant
    Dim cell As Range
    For Each cell In table_array.Columns(1).Cells
        If cell.Value = lookup_value Then
            CustomVlookup = cell.Offset(0, col_index_num - 1).Value
            Exit Function
        End If
    Next cell
    CustomVlookup = "Not Found"
End Function

El código anterior define una función personalizada CustomVlookup en VBA que tiene una funcionalidad similar a la función VLOOKUP. Aquí está cómo usarla:

Sub TestCustomVlookup()
    Dim result As Variant
    result = CustomVlookup("ValorBúsqueda", Sheets("Hoja1").Range("B1:C10"), 2)
    MsgBox result
End Sub

Técnicas avanzadas

Hasta ahora, no hay necesidad particular de crear una función personalizada, pero usar VBA permite varias técnicas avanzadas.

Búsqueda de coincidencia parcial

Mientras que VLOOKUP estándar solo admite coincidencias exactas, VBA permite búsquedas de coincidencias parciales.

Function CustomVlookupPartial(lookup_value As String, table_array As Range, col_index_num As Integer) As Variant
    Dim cell As Range
    For Each cell In table_array.Columns(1).Cells
        If InStr(1, cell.Value, lookup_value) > 0 Then
            CustomVlookupPartial = cell.Offset(0, col_index_num - 1).Value
            Exit Function
        End If
    Next cell
    CustomVlookupPartial = "Not Found"
End Function

Alternando entre coincidencias exactas y parciales

También es importante poder alternar entre coincidencias exactas y parciales según sea necesario. Por ejemplo, puedes permitir que el usuario especifique esto con un argumento.

Function CustomVlookupFlexible(lookup_value As Variant, table_array As Range, col_index_num As Integer, Optional partial_match As Boolean = False) As Variant
    Dim cell As Range
    For Each cell In table_array.Columns(1).Cells
        If (partial_match And InStr(1, cell.Value, lookup_value) > 0) Or (Not partial_match And cell.Value = lookup_value) Then
            CustomVlookupFlexible = cell.Offset(0, col_index_num - 1).Value
            Exit Function
        End If
    Next cell
    CustomVlookupFlexible = "Not Found"
End Function

Manejo de errores

Para prevenir errores cuando no se encuentran datos, implementa un manejo de errores apropiado.

Function CustomVlookupWithErrorHandling(lookup_value As Variant, table_array As Range, col_index_num As Integer) As Variant
    On Error GoTo ErrorHandler
    Dim cell As Range
    For Each cell In table_array.Columns(1).Cells
        If cell.Value = lookup_value Then
            CustomVlookupWithErrorHandling = cell.Offset(0, col_index_num - 1).Value
            Exit Function
        End If
    Next cell
    CustomVlookupWithErrorHandling = "Not Found"
    Exit Function

ErrorHandler:
    CustomVlookupWithErrorHandling = "Error: " & Err.Description
End Function

Ejemplos de uso práctico

Búsqueda en base de datos

Por ejemplo, buscar información de empleados basada en el ID de empleado.

Sub SearchEmployeeInfo()
    Dim employeeID As String
    Dim result As Variant
    employeeID = InputBox("Ingrese_el_ID_del_empleado:")
    result = CustomVlookup(employeeID, Sheets("DatosEmpleados").Range("A1:D100"), 2)

    If result = "Not Found" Then
        MsgBox "Información_del_empleado_no_encontrada."
    Else
        MsgBox "Nombre_del_empleado: " & result
    End If
End Sub

Autocompletar información de productos

Rellenar automáticamente celdas con información cuando se ingresa un código de producto.

Sub AutoFillProductInfo()
    Dim productCode As String
    Dim productName As Variant
    Dim productPrice As Variant

    productCode = Cells(2, 1).Value '_Asume_que_el_código_de_producto_está_en_la_celda_A2
    productName = CustomVlookup(productCode, Sheets("DatosProductos").Range("A1:C100"), 2)
    productPrice = CustomVlookup(productCode, Sheets("DatosProductos").Range("A1:C100"), 3)

    If productName = "Not Found" Or productPrice = "Not Found" Then
        MsgBox "Información_del_producto_no_encontrada."
    Else
        Cells(2, 2).Value = productName '_Ingrese_nombre_del_producto_en_celda_B2
        Cells(2, 3).Value = productPrice '_Ingrese_precio_en_celda_C2
    End If
End Sub

Resumen

Usar VBA permite búsquedas de datos flexibles que no están limitadas por la función VLOOKUP de Excel. Al crear funciones personalizadas combinando estas técnicas, puedes realizar fácilmente procesamientos adaptados a tus necesidades empresariales. Por favor, intenta incorporar estas técnicas en tus propios proyectos.

#VBA #Excel #VLOOKUP #Búsqueda de Datos #Función