jueves, 24 de junio de 2010

La función HALLAR en Excel.

Desarrollé hace algún tiempo, a petición de un usuario, un ejercicio con la función ENCONTRAR, en éste mencioné de pasada la función de la que voy a hablar hoy, la función HALLAR.

La sintaxis de la función es:
=HALLAR(texto buscado; dentro de; [comienza la búsqueda en la posición])
Las principales ventajas de esta función son que no distingue entre mayúsculas o minísculas, y permite el uso de los comodines estándar de Excel (? y * para un único caracter o una secuencia de ellos).


Veámoslo con un pequeño ejercicio en el que queremos contar cuántos elementos de una lista contienen un concepto:


Aplicaré la siguiente función para HALLAR los productos que contengan el concepto 'HOJA'; observemos que este concepto lo encontramos escrito de diferentes maneras (Hoja, hojas, HOJA):
=HALLAR("hoja";A2;1)
obteniendo el siguiente resultado (llógicamente para aquellos productos que no encuentra nada la función nos devuelve un error #¡VALOR!):


veámos la diferencia de resultados con la función ENCONTRAR:


La función ENCONTRAR sólo devuelve un valor si la coincidencia es exacta en cuanto a mayúsculas y minísculas.


Sólo queda contar el número de productos que contienen el concepto buscado, para ello aplicamos la función anidada:
=ESERROR(HALLAR("hoja";A2;1))
y sobre el rango resultante, en la celda D9, haremos el conteo
=CONTAR.SI(D2:D8;"FALSO")

41 comentarios:

  1. Interesante, MI APORTACIÓN. Se puede mejorar para que en lugar de visualizar #¡VALOR!, se muestre la celda vacía, sería así:

    =SI(ESERROR(HALLAR("hoja";A2;1));"";HALLAR("hoja";A2;1))

    ResponderEliminar
  2. Gracias por el aporte Finart,
    efectivamente el método es válido para ocultar los errores, pero en este caso es precisamente el error lo que buscamos para poder contabilizar las coincidencias.
    Un saludo y muchas gracias por la aportación.

    ResponderEliminar
  3. Necesito un poco de ayuda como hago para que en una hoja busque jale los datos de otra hoja con solo buscar o poner un datos

    ResponderEliminar
  4. Hola,
    seguro que conoces la función BUSCARV, con ella podrás, en base a un valor buscado, traer los datos que necesites de cualquier otro lugar o de otra hoja.
    La sintáxis es:
    =BUSCARV(valor buscado; rango donde buscar; columna de datos a devolver; 0)
    Espero te sirva... poco más te puedo ayudar con los datos que aportas.
    Slds

    ResponderEliminar
  5. y con esa funcion de hallar/encontrar se puede hacer lo siguiente: en la columna A pongo la palabra "consig." en la B un valor correspondiente a esa palabra y en la C la funcion que evalue si dice "consig." sume una celda con otra y si no que no sume, es posible???

    ResponderEliminar
  6. Hola, buenos días.
    no sé a que celdas te refieres que sume con lo de 'una celda con otra'. Pero intuyo que necesitas algo así, en la celda C1:
    =SI(A1="consig.";B1+ ?;0)
    el interrognate es esa otra celda que quieres sumar.
    Un cordial saludo

    ResponderEliminar
  7. bueno voy a probar esa, pero entonces te lo explico completo,en la columna 'c' pongo los pagos que recibo ya sea en efectivo o consignaciones(a las consignaciones les coloco "CONSIG." y si es efectivo solo un codigo mz10-10...), en las columnas que van de la 'd' hasta la 'i' pongo el valor pagado, de la 'j' a la 'l' pongo los gastos que yo hago y en la 'm' tengo un total de los ingresos-egresos, pero yo quiero agregar otra en la 'n' que me muestre solo lo que tengo en efectivo, entonces era como: solo sumar lo que no tenga la palabra CONSIG.

    ResponderEliminar
  8. Hola,
    envíame el ejemplo a
    excelforo@gmail.com
    y le echo un vistazo
    Slds

    ResponderEliminar
  9. Hay mas ejemplos con hallar donde s eusa el +1 o -1 y el "

    ResponderEliminar
    Respuestas
    1. Hola,
      la función HALLAR plantéa una búsqueda sobre un texto a partir de la posición que indiques, en este caso 1; HALLAR empezando desde -1 te devolvería resultados anormales.
      Slds

      Eliminar
  10. quiero saber como encuentro un valor en una función si tengo lo siguiente 80=0.9*420*X(2-((420*X)/(2*30))) quiero encontrar el menor valor de x como lo hago en excel

    ResponderEliminar
    Respuestas
    1. Hola Francisco,
      para resolver ecuaciones en Excel disponemos de dos herramientas (primas hermanas) que son Buscar objetivo y Solver.

      Puedes ver un ejemplo muy similar al que planteas en:
      http://excelforo.blogspot.com.es/2010/03/raiz-de-una-ecuacion-con-buscar.html
      Slds

      Eliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. como utilizo hallar con dos criterios!!!!

    ResponderEliminar
    Respuestas
    1. Hola que tal?
      un gusto saludarte igualmente.

      HALLAR solo admite una cadena de búsqueda.. si necesitas más criterios a buscar (no se me ocurre en qué forma), deberías emplear los comodines de Excel: * y ?

      Un cordial saludo

      Eliminar
  13. hola, tengo el siguiente problema: tengo en la columna A los dineros pedidos, en la columna B si el dinero es "deposito", entregado por mano u otra observacion y en la columna C lo que queda en caja chica. La consulta es como hacer que si en la columna b dice "deposito anticipo sueldo" no descuente en la columna C. No se si me he explicado bien... espero me puedan ayudar

    ResponderEliminar
    Respuestas
    1. Hola Oscar,
      entiendo en la columna C tienes un saldo acumulado por cada movimiento (un saldo corrido), si es así y no quieres sumar aquellos registros con 'depósito', en C2 podrías escribir:
      =C1+si(B2="deposito";0;B2)

      Espero te sirva la idea.
      Slds

      Eliminar
  14. Hola tengo una celda con texto, quiero saber si tiene caracteres incluidos por ejemplo. o , (punto o coma), la funcion hallar solo la he utilizado para buscar un solo carácter o palabra como lo hago para hallar mas de una palabra aunque estén separadas??

    ResponderEliminar
    Respuestas
    1. Hola,
      no se si entiendo bien.
      ¿quieres saber si una celda contiene punto o coma?.
      Si es así, bastaría por ejemplo:
      =o(HALLAR(",";A1)>0;HALLAR(".";A1)>0)
      devolverá verdadero en caso afirmativo..

      Espero te oriente
      Saludos

      Eliminar
    2. Muchas Gracias por responder, eso es lo que necesito pero al copiar la formula solo me trae #¡Valor!, como puedo solucionarlo ya que lo probe en celdas que contenian los caracteres indicados(punto o coma)

      Eliminar
    3. Ismael si modifico la formula y coloco que los dos caracteres sean el mismo si me funciona, a que se deberá este error, por ejemplo la formula la modifique asi como sigue =o(HALLAR(",";A1)>0;HALLAR(",";A1)>0) coloque dos comas en lugar de . y coma y me funciona pero no me sirve as{i, favor tu ayuda

      Eliminar
    4. Hola, prueba con:
      =o(SI.ERROR(HALLAR(",";A1)>0;FALSO);SI.ERROR(HALLAR(".";A1)>0;FALSO))

      Saludos

      Eliminar
  15. Hola una consulta quiero usar la función HALLAR junto a la función SI como puedo hacer en mi caso tengo varias celdas y quiero hallar las palabras que deseo y a la vez que se reemplacen.

    Ejemplo.

    celda A1 - Platano - si(hallar("Platano",A1),"Amarillo")
    celda A2 - Manzana - Si(hallar("Platano",A1),"Amarillo",si(hallar("Manzana",A2),"Rojo",hasta acame me quedo por que me bota error))

    son varias celdas y siempre que informacion de otra hoja y las chanco encima por eso necesito usar la funcion Si

    ResponderEliminar
    Respuestas
    1. Hola Geanfranco,
      en realidad yo diría que la fórmula deberá referirse siempre a la misma celda:
      =Si(hallar("Platano",A1),"Amarillo",si(hallar("Manzana",A1),"Rojo"))
      y luego arrastrar, obtendrías de esta forma un check de si en cada celda aparece una de las palabras buscadas...

      Para reemplazar tendrás que emplear la herramienta Buscar/reemplazar o bien programación...

      Slds

      Eliminar
  16. Buenas tardes:
    Creo que mi problema es mas simple, pero no doy con la solución. Lo que quiero es que si dentro del valor de una celda encuentra un carácter me devuelva 1 o 0 en caso negativo (no que me indique el lugar como hace HALLAR).
    Te pongo un ejemplo: Si tengo el valor en un celda de 1X2D4 y quiero que me busque si contiene el valor X, como es verdad en este caso me devuelva el valor 1 (y no el valor 2 como haría la formula HALLAR); si quiero que me busque el valor Z, como es falso que me devuelva el valor 0.
    Gracias por tu gran trabajo.

    ResponderEliminar
    Respuestas
    1. Hola,
      puedes aplicar un condicional:
      =--SI.ERROR(HALLAR("X";celda)>0;0)

      Saludos

      Eliminar
    2. Gracias Ismael:
      Pero no es exactamente lo que quiero. Te explico exactamente lo que intento hacer.
      He creado una Excel para controlar los resultados de una quiniela de futbol. En ella controlo los partidos, los goles que marcan los equipos y automáticamente me da el resultado de la quiniela 1, X o 2.
      Esta celda con resultado es el que quiero comparar con mis apuestas (en el caso de apuesta sencilla de 1, X o 2 es fácil y lo tengo resuelto).
      El problema lo tengo si tengo apuesta múltiple de 1X, 12, X2 o 1X2. Aquí es donde te planteo el problema de que si el resultado del partido es 1, X o 2, lo busque en las celdas de mis apuestas con 1X, 12, X2 o 1X2, y si lo encuentra devuelva el valor 1 (para contabilizar un acierto) y si no lo encuentra el valor 0 (para contabilizar un fallo.
      Espero que te guste el futbol, de lo contrario será un "tostón" para ti.
      Graciasssss

      Eliminar
    3. Hola,
      correcto, así lo había entendido...
      copia la fórmula indicada para cada resultado/partido y obtendrás un 1 o un cero según indicabas:

      =--SI.ERROR(HALLAR(resultado;apuesta)>0;0)

      Saludos

      Eliminar
    4. Ahora siiiiii: PERFECTO
      No se que haría antes mal, ya que la formula que me indicas es la misma.
      Mil gracias por tu ayuda. Eres magnifico.
      Saludos,

      Eliminar
  17. Una cosa mas Ismael (aunque no quiero abusar de tus conocimientos): Una vez que ya tengo todo correcto y que me ha validado el acierto o el error del resultado del partido, quisiera dar un "formato condicional" en caso de acierto. Por ejemplo:
    Si el resultado del partido es un 2 y mi pronostico ha sido de X2, quisiera que solamente el 2 (del pronostico X2) resalte en verde y la X quede en rojo.
    Para pronósticos sencillos de un solo digito es sencillo y lo tengo resuelto, pero cuando es pronostico múltiple no logro conseguirlo, ya que me da el formato a la totalidad de la celda.
    Gracias de nuevo,

    ResponderEliminar
    Respuestas
    1. Hola,
      no es posible tal cosa con el estándar del formato condicional..
      habría que aplicar macros
      ;-)

      Slds

      Eliminar
  18. Ismael, esperando estes bien. Tengo una formula que no puedo hacer funcionar. Para O365 salio si.conjunto(). Que permite anidar los si mas facilmente. LO que quiero basicamente hacer es combinar si.conjunto y hallar para preguntar por string dentro de una celda y tengo esto: =SI.CONJUNTO((O(HALLAR("RK_ICD_I_2002";O5)>0))=VERDADERO;"BSS") funciona de maravillas, pero si agrego esto: =SI.CONJUNTO((O(HALLAR("RK_ICD_I_2002";O5)>0))=VERDADERO;"BSS";(O(HALLAR("RK_ICD_I_2017";O5)>0))=VERDADERO;"BSS") falla si el texto no tiene 2002 pero si 2017, es demasiado extraño... le doy mil vueltas y no veo el error... que piensas?

    ResponderEliminar
    Respuestas
    1. Hola,
      Comenzaré indicándote que no es necesario que emplees la función O, podría ser más simple:
      =SI.CONJUNTO(HALLAR("RK_ICD_I_2002";O5)>0;"BSS")
      En cuanto al fallo habría que ver que valor tiene la celda O5...
      si en alguna parte de la celda aparece 'RK_ICD_I_2002' devolverá posición y aplicará la condición... devolverá 'BSS'
      En el caso de la otra fórmula:
      =SI.CONJUNTO(HALLAR("RK_ICD_I_2002";O5)>0;"BSS";HALLAR("RK_ICD_I_2017";O5)>0;"BSS")
      ocurre lo mismo, en la celda debe poner o 'RK_ICD_I_2002' o 'RK_ICD_I_2017' en alguna parte de la celda para que devuelva el dato 'BSS'

      Espero haberte aclarado algo
      Saludos

      Eliminar
    2. Muchas gracias Ismael por tu tiempo!, efectivamente también intente usando lo que me indicas, pero no importa como, también falla. Por ejemplo (si tienes tiempo), Celda A usa la formula que me indicas mientras que en Celda B pones el texto "RK_ICD_I_2002". Te fijaras que si la primera evaluación esta el 2002 (como en tu ejemplo) retornara BSS, pero si alteras el valor de Celda B a "RK_ICD_I_2017" te dará error cuando debiese ser BSS. Realmente me tiene loco :D Gracias!

      Eliminar
    3. :DD
      pues no sabría decirte.. ten en cuenta que SI.CONJUNTO va aplicando condiciones en el orden en que se las das... algo raro está pasando claramente que se nos escapa.
      Si solo tienes dos valores a comparar emplea el SI tradicional de toda la vida
      =SI(HALLAR("RK_ICD_I_2002";O5)>0;"BSS";si(HALLAR("RK_ICD_I_2017";O5)>0;"BSS"))
      y listo...
      Saludos

      Eliminar
  19. Hola.
    Necesito colocar en una celda cualquiera de Excel el nombre del fichero, pero solo quiero una parte del nombre.
    Por ej. si el nombre del fichero fuese "Factura_2018_01" que el resultado en la celda pudiera ser "2018_01" evidentemente sin las comillas.
    Muchas Gracias y Saludos.

    ResponderEliminar
    Respuestas
    1. Hola,
      no se si ya tienes disponible el nombre del fichero...
      si lo tuvieras bastaría aplicar una función SUSTITUIR sobre la celda:
      =SUSTITUIR(nombre_fichero;"Factura_";"")

      Saludos

      Eliminar
    2. Muchas Gracias Ismael.
      Con tu aporte y lo que yo había encontrado por internet pude componer la formula para conseguir lo que pretendía.
      Quizá sea algo extenso/coñazo y puede que TU tengas alguna otra alternativa mas simple, se agradecen sugerencias.
      Por aquí dejo el "chorizo" por si le sirve a alguien mas :

      =SUSTITUIR(EXTRAE(CELDA("FILENAME";U33);ENCONTRAR("[";CELDA("FILENAME";U33))+1;ENCONTRAR("]";CELDA("FILENAME";U33))-ENCONTRAR("[";CELDA("FILENAME";U33))-6);"Factura_";"")


      Saludos.

      Eliminar
    3. De nada, faltaria mas.!!!

      Añado o comento que la referencia a la celda U33 es indistinta se puede poner cualquier celda, para hacerlo un poco mas corto podría quedar de esta manera poniéndolo con la celda A1 :

      =SUSTITUIR(EXTRAE(CELDA("FILENAME";A1);ENCONTRAR("[";CELDA("FILENAME";A1))+1;ENCONTRAR("]";CELDA("FILENAME";A1))-ENCONTRAR("[";CELDA("FILENAME";A1))-6);"Factura_";"")

      El -6 que figura "casi" al final sirve para quitar la extensión y el punto(.xlsx) y si quisiéramos dejarlo con extensión debería dejarse con -1

      Saludos.

      Eliminar

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