jueves, 20 de marzo de 2014

BUSCARV sobre rango con condiciones.

Me explico, trataré hoy la manera de aplicar una función BUSCARV sobre un rango de celdas... pero sólo sobre aquellas que cumplan unas condiciones.
Dicho de otro modo, tenemos un rango de celdas (o una Tabla) y queremos realizar una búsqueda vertical sólo sobre aquellos registros que cumplan ciertas condiciones.

Imaginemos el siguiente origen de datos A1:D11:

BUSCARV sobre rango con condiciones.


La idea es realizar la búsqueda sólo sobre aquellos registros que cumplan nuestras restricciones, en el ejemplo que el campo 'Cond1' sea igual a rojo y que al tiempo el campo 'Cond2' sea menor estricto a 100.. es decir, realizar la búsqueda vertical exclusivamente sobre los registros de las filas 3,6 y 10.
Sobre esas filas será sobre las que trabajará nuestras función BUSCARV para encontrar el elemento buscado, en el ejemplo el valor de la celda F3.
La función buscada de la celda G3, que ejecutaremos matricialmente, es:
=BUSCARV(F3;SI(B2:B11="rojo";SI(C2:C11<100;A2:D11));4;0)


donde indicamos que busque entre los registros que cumplen nuestras dos condiciones en la primera columna el elemnto x1 y devuelva su correspondiente de la cuarta columna (campo 'Importe').
En la imagen anterior vemos cómo nuestra función devuelve el valor esperado, es decir, de entre los tres registros, retorna el 'Importe' que corresponde al elemento 'x1'.


La clave de este resultado es el rango matricial que obtenemos con la fórmula:
=SI(B2:B11="rojo";SI(C2:C11<100;A2:D11))



que podemos ver en la imagen siguiente:

BUSCARV sobre rango con condiciones.


Observamos cómo sólo los tres registros comentados anteriormente aparecen en ese rango matricial.
En conclusión, hemos conseguido aplicar un BUSCARV sobre un rango filtrado con éxito.

5 comentarios:

  1. Hola Ismael,
    Felicidades por el blog antes de nada.
    Me gustaria saber si puedo utilizar buscarv para lo siguiente o no; tengo dos hojas excel con muchos datos que coinciden.En la segunda hoja tengo dos horas de inicio y fin asociadas a la actividad de pesca y en la primera hoja tengo por fechas y y horas a lo largo de un dia tambien asociadas a una actividad; por ejemplo el dia 15/10/2000 de 10:00 a las 12:00 empezo y acabo la actividad de busqueda y a las 12:00 empezo otra actividad.
    Lo que me gustaria hacer es que si en el intervalo de tiempo de la hoja 2 coincide con el tiempo de la hoja 1 que cambie la actividad asociada a ese tiempo por la palabra pesca.
    Podria hacerlo con buscarv? dado que son muchos datos y a mano es imposible hacerlo.
    Muchas gracias por su tiempo, un saludo.


    ResponderEliminar
    Respuestas
    1. Hola Marta,
      muchas gracias!!
      No termino de comprende bien el juego de las horas, por eso mejor (si quieres) envíame el fichero a
      excelforo@gmail.com
      y le echo un vistazo con lo que me cuentas..

      Se me ocurre que quizá se podría emplear BUSCARV empleando el VERDADERO como cuarto argumento.. pero habría que ver cómo tienes distribuidos los datos...

      Saludos cordiales

      Eliminar
  2. Buenos Días Ismael.

    Ante todo muchas gracias por los aportes que siempre realizas en tu blog.

    En esta oportunidad deseo consultar sobre lo siguiente: tengo un cuadro en Excel que manejo a diario constantemente y con gran volumen de datos relacionados con un estimado de cuentas por cobrar de los próximos 3 meses (actualmente proyecto mes de abril, mayo y junio).

    En ese cuadro siempre estoy agregando filas para incluir facturas próximas a cobrar y eliminado filas para excluir las facturas ya cobradas.

    Necesito encontrar una forma para que independientemente de agregar o eliminar filas la función BUSCARV siempre me considere el mismo rango; por ejemplo: =BUSCARV(D5;'PROYECCION SEMANAL'!$B$2:$C$2000;2;FALSO). Es decir, que al eliminar o agregar filas el rango siempre sea !$B$2:$C$2000.

    Creo que podría funcionar anidando la función BUSCARV con la función INDIRECTO, pero te confieso que aún no logro comprender la sintaxis de la función INDIRECTO.

    De antemano muy agradecida en lo que puedas ayudarme.

    ResponderEliminar
    Respuestas
    1. Hola,
      pues efectivamente la función INDIRECTO daría solución a tu problema. Tendría esta forma:
      =BUSCARV(D5;INDIRECTO("'PROYECCION SEMANAL'!$B$2:$C$2000);2;FALSO)
      OJO!! con los apostrofes que limitan el nombre de la hoja, se deben incluir..

      INDIRECTO convierte un literal en una referencia (rango, celda o nombre definido) entendible por Excel.
      Saludos

      Eliminar
  3. Buenos Días Ismael. Muchas gracias. Con tu ayuda solventé el problema que tenía.

    ResponderEliminar