jueves, 29 de junio de 2017

Cómo conseguir que BUSCARV devuelva vacío y no cero

Vamos a solucionar un problema muy habitual al trabajar con la función más empleada (posiblemente):
BUSCARV.
Cuantas veces al recuperar un valor buscado, la función BUSCARV, nos devuelve un cero cuando la realidad es que el valor correspondiente es un blanco, i.e., una celda vacía.
Esto puede llevarnos a confusión con valores que realmente si tengan un dato, un dato con valor cero.


Veamos nuestro planteamiento:

Cómo conseguir que BUSCARV devuelva vacío y no cero



Vemos nuestra tabla de información llamada 'TblDatos' y cómo en la celda F4 hemos construido una forma elegante de controlar el problema que nos atañe:
=SI(ESBLANCO(BUSCARV(E4;TblDatos;2;0));"";BUSCARV(E4;TblDatos;2;0))

comprobamos como mediante un condicional SI gestionamos el valor devuelto con BUSCARV, para que en caso sea un valor vacío, nos devuelva 'nada' (o doble comillas), en caso contrario, esto es, que no sea vacío, el condicional nos devolverá el valor correspondiente que retorne BUSCARV.

Esta, desde mi punto de vista es la mejor opción, ya que el valor devuelto será del mismo tipo que en el origen.

No ocurre lo mismo con otra posible solución, más corta pero también más limitada.
En G4:
=""&BUSCARV(E4;TblDatos;2;0)

observamos que simplemente hemos concatenado antes del valor devuelto por BUSCARV unas dobles comillas...
El problema de este ejemplo es que todos los valores devueltos los tratará siempre como texto!!!


Otra forma habitual es empleando la función LARGO, que permite controlar el número de caracteres retornado por BUSCARV... en caso de ser cero, equivaldría a no tener caracteres, es decir, ser una celda vacía.
=SI(LARGO(BUSCARV(E4;TblDatos;2;0))=0;"";BUSCARV(E4;TblDatos;2;0))


Existen, por supuesto, otras variantes.

No quiero terminar esta sencilla entrada sin mostrar una manera de controlar dos (o más) problemas de manera simultánea.
En el ejemplo, en la celda F5 añadimos:
=SI(ESNOD(BUSCARV(E5;TblDatos;2;0))+ESBLANCO(BUSCARV(E5;TblDatos;2;0));"-";BUSCARV(E5;TblDatos;2;0))

Nuevamente controlamos con un SI condicional nuestros problemas, en este caso, dos posibles errores:
1-que la celda devuelta esté vacía
2-que la celda devuelta contenga un error #N/A

Cómo conseguir que BUSCARV devuelva vacío y no cero



Lo interesante de este último ejercicio es la construcción de la prueba lógica de la función SI:
ESNOD(BUSCARV(E5;TblDatos;2;0))+ESBLANCO(BUSCARV(E5;TblDatos;2;0))

empleando dos funciones lógicas tipo ES (otros ejemplos) controlamos si BUSCARV devuelve un error #N/A o una valor 'blanco' o vacío.
En caso de que ocurra solo uno de ellos la suma devolverá 1 (algo diferente de cero), lo que en el contexto de una prueba lógica, se leerá como VERDADERO, en caso de no cumplirse ninguna de las dos funciones, la suma devolverá 0 lo que se interpreta como FALSO

Recuerda esa interpretación general en Excel (y en otros aspectos):
1 es VERDADERO
0 es FALSO.

6 comentarios:

  1. Excelente explicación, gracias por compartir.

    ResponderEliminar
  2. Muchas gracias por el aporte: ¡bien explicado,conciso y realmente útil!

    ResponderEliminar
  3. SI.ND(BUSCARV(E4;TblDatos;2;0);"") es más corto

    ResponderEliminar
    Respuestas
    1. Gracias por el aporte, pero en realidad no es el mismo caso, ya que lo que se plantea es que sí lo encuentre pero devuelve un valor vacío...
      tu forma es válida siempre que no encuentre el valor buscado
      ;-)
      Muchas gracias por compartir!

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.