TOP

Función mejorada VLOOKUP (VLOOKUP2)

Descripción

La función incorporada VLOOKUP es una de las funciones más poderosas de Excel. Pero tiene un inconveniente importante: sólo encuentra la primera aparición del valor deseado en la tabla y sólo en la columna del extremo derecho. ¿Pero si necesitas el segundo, el tercero y no el último?


Un ejemplo de un problema

Digamos que tenemos una tabla de préstamos procesados como esta:

Necesitamos saber, por ejemplo, cuál fue el monto del tercer préstamo otorgado a Mike o cuándo John ejecutó su segundo acuerdo. Función incorporada VLOOKUP sabe buscar sólo la primera aparición de un nombre en la tabla y no nos ayudará.

Escribamos nuestra función, que buscará no solo la primera, sino también cualquier entrada posterior (enésima). Llamémoslo, por ejemplo, VLOOKUP2.

VBA código para la función VLOOKUP2

abre el menú Servicio - Macro - Editor Visual Basic , inserte el nuevo módulo (menú Insert - Module) y copia allí el texto de esta función:

Function VLOOKUP2(Table           As Range, _
                  SearchColumnNum As Integer, _
                  SearchValue     As Variant, _
                  N               As Integer, _
                  ResultColumnNum As Integer)        
  Dim i      As Integer
  Dim iCount As Integer
       
  For i = 1 To Table.Rows.Count
    If Table.Cells(i, SearchColumnNum) = SearchValue Then
      iCount = iCount + 1
    End If
    If iCount = N Then
      VLOOKUP2 = Table.Cells(i, ResultColumnNum)
      Exit For
    End If
  Next i
End Function 

Cierre el editor Visual Basic y regrese a Excel.

Ahora, en el Asistente de funciones, en la categoría Definido por el usuario, puede buscar y utilizar nuestra función VLOOKUP2. La sintaxis de la función es la siguiente:

=VLOOKUP2(mesa ; número_columna_dónde_buscamos ; valor_buscado; número de entrada ; número_columna_de_la_que_tomamos_el_valor )

Es decir, para encontrar el monto del tercer préstamo otorgado a Mike, deberá ingresar:

=VLOOKUP2(A2:A19 ; 1 ; "Mike"; 3 ; 4 )

Artículos sobre el tema: