martes, 9 de febrero de 2016

Búsquedas sensibles a las mayúsculas o minúsculas.

Hoy veremos cómo conseguir realizar búsquedas que discriminen las mayúsculas y minúsculas.
El problema que se plantea en nuestras búsquedas, con las funciones habituales: BUSCAR, BUSCARV, BUSCARH, COINCIDIR etc es que NO son sensibles a las mayúsculas-minúsculas, y devuelven coincidencias por caracter, independientemente del tipo de letra.

Pero y ¿qué puedo hacer si deseo realizar búsquedas precisas, incluyendo la tipología de la letra (mayúscula-minúscula)?


Partamos de la siguiente tabla de información, donde aparecen en el primer campo una referencias desordenadas, algunas en mayúsculas y otras minúsculas:

Búsquedas sensibles a las mayúsculas o minúsculas.



Si deseamos buscar la referencia exacta 'X1' en mayúscula no podremos optar por un simple BUSCARV, ya que nos devolvería el primer dato...(incorrecto para nuestra precisión)
Algunas opciones de las que disponemos, si el valor buscado se encuentra en la celda E1.


Primera. Con la condición obligatoria que los datos/referencias buscadas estén ordenadas en sentido ascendente (de A a Z).
=BUSCAR(VERDADERO;IGUAL(TblDatos[ref];E1);TblDatos[uds])


Segunda. Bajo la hipótesis que el valor devuelto sea numérico.
=SUMAPRODUCTO(IGUAL(TblDatos[ref];E1)*TblDatos[uds])


Y tercera. Para cualquier hipótesis y en cualquier caso.
Usaremos la función matricial (ejecutada presionando Ctrl+Mayúsc+Enter en vez de Enter):
=INDICE(TblDatos[uds];COINCIDIR(VERDADERO;IGUAL(TblDatos[ref];E1);0))



En todas las fórmulas mostradas la clave reside en el uso de la función IGUAL, la cual sí detecta y distingue entre mayúsculas y minúsculas (justo lo que necesitamos).
Si extrapolamos y sacamos la fórmula de las funciones de búsqueda obtendríamos este rango de VERDADEROS y FALSOS sobre el que luego realizar la búsqueda con cualquier método:

Búsquedas sensibles a las mayúsculas o minúsculas.


Rápidamente se comprende el sentido de la búsqueda en los diferentes ejemplos... solo existe una coincidencia exacta/igual, la cual devuelve VERDADERO... que será nuestro valor buscado.

5 comentarios:

  1. Interesante Ismael, :)

    Al final me has metido el gusanillo y he probado con buscarv, suponiendo dos columnas A y B y que busquemos los datos de B en A (teniendo en cuenta mayúsculas y minúsculas:

    =SI.ERROR(SI(IGUAL(BUSCARV(B2;$A$2:$A$65000;1;0);B2)=VERDADERO;BUSCARV(B2;$A$2:$A$18;1;0));"")

    Saludos! ;)

    ResponderEliminar
    Respuestas
    1. Gracias Segu,
      el inconveniente que veo en tu planteamiento es que realizas un BUSCARV para compararlo con el valor buscado:
      IGUAL(BUSCARV(B2;$A$2:$A$65000;1;0);B2)
      y hay que tener presente que el BUSCARV te devolverá la primera coincidencia (con o sin mayúsculas)...
      en mi ejemplo, si buscas 'X1' con BUSCARV te devolverá la primera que encuentre, en mi ejemplo la primera fila... (con minúscula), por tanto la comparación con IGUAL te devolvería FALSO, y toda la fórmula vacío, como si no hubiera encontrado nada igual, cuando en realidad sí existe una coincidencia exacta.

      Por eso el orden de acción debe ser primero con el IGUAL y luego con la función de búsqueda...

      Un cordial saludo!!

      Eliminar
  2. Corrigo, que faltaban unas comillas en la fórmula :)

    =SI.ERROR(SI(IGUAL(BUSCARV(B2;$A$2:$A$65000;1;0);B2)=VERDADERO;BUSCARV(B2;$A$2:$A$65000;1;0);"");"")

    ResponderEliminar
  3. Sí, efectivamente, es como dices, lo que sucede es que en mi caso (profesional) suelo trabajar con registros únicos y aunque esto lo realizo con código, sí me gusta la alternativa a buscar la primera coincidencia exacta.

    No era tanto el utilizarla para que funcione como tu ejemplo, sino incorporar el IGUAL en la fórmula.

    Pero me gustan los ejemplos que has puesto (especialmente la matricial).

    Saludos!!

    ResponderEliminar
    Respuestas
    1. ;-)
      un placer compartir contigo

      Saludos cordiales

      Eliminar