domingo, 3 de abril de 2022

54 - BUSCARV vs INDICE+COINCIDIR.

No siempre la función BUSCARV nos resuelve una búsqueda de cierta información según el criterio empleado. Por ejemplo, si tenemos una tabla de varias columnas y el criterio se encuentra en una columna central como en la imagen.


BUSCARV nos devolverá la información a derecha. Y para obtener la de la izquierda utilizaremos lasfunciones INDICE + COINCIDIR.

Ejemplos de fórmulas de búsqueda para una tabla como la de la siguiente imagen:

Ubicamos en celda M2 un número de documento:  F-104

Para obtener el nombre   =BUSCARV($M$2;D:F;3;FALSO)
Para obtener el importe  =BUSCARV(M2;D3:H18;5;FALSO)

Para obtener la fecha      =INDICE(C:C;COINCIDIR($M$2;D:D;0))
Para obtener el Id.Reg   =INDICE(B3:B17;COINCIDIR(M2;D3:D17;0))

Notas: los signos $ solo serán necesarios si arrastramos la fórmula. La búsqueda puede realizarse en columnas completas (D:F) siempre y cuando no haya otras tablas o datos más allá de este rango.

En el caso de que nuestra hoja tenga Diseño de Tabla, no necesitamos seleccionar columnas o rangos de datos, sino simplemente hacer mención al nombre de la columna.


Para obtener el nombre   =BUSCARV(M2;Tabla1[[NRO.DOC.]:[NOMBRE]];3;FALSO)
Para obtener la fecha      =INDICE(Tabla1[FECHA];COINCIDIR($M$2;Tabla1[NRO.DOC.];0))

Nota: a pesar de ser Tabla, de todos modos podemos utilizar las fórmulas anteriores. Pero justamente tenemos que aprovechar las ventajas de no tener que seleccionar rangos sino utilizar los títulos de columnas.

Y si de VBA se trata, estas 2 macros nos resuelven el problema de modo sencillo:

Sub busqueda_Gral()

'devolviendo datos a la derecha del código buscado

dato = [M2]

Set busco = Range("D:D").Find(dato, LookAt:=xlWhole)

If Not busco Is Nothing Then   

    [O4] = Range("F" & busco.Row)       'indicando la col a devolver

    [O7] = busco.Offset(0, 4)                    'moviéndonos 4 col a derecha

End If

End Sub

 

Sub busqueda_Tabla()

'devolviendo datos a la izquierda del código buscado, en un diseño de Tabla

dato = [M2]

Set busco = Range("Tabla1[[NRO.DOC.]]").Find(dato, LookAt:=xlWhole)

If Not busco Is Nothing Then

    [P4] = Range("C" & busco.Row)      'indicando la col a devolver

    [P7] = busco.Offset(0, -2)                  'moviéndonos 2 col a la izquierda 

End If

End Sub

 

IMPORTANTE: las fórmulas con las funciones INDICE + COINCIDIR también pueden ser utilizadas para obtener información a la derecha del dato buscado.


Para descargar el libro de ejemplo, entrar aquí.

Para ver video 54 entrar aquí.











No hay comentarios.:

Publicar un comentario