Reto 02: Extraer fecha de cualquier celda

El mes pasado inauguré la sección «El Reto de Ayuda Excel» que tuvo bastante participación. Puedes verlo aquí.

El reto de este mes consiste en extraer la fecha de una celda. Esta fecha está integrada en un texto y en diferentes posiciones. La solución que propongas debe cumplir estas tres condiciones:

  • Sólo puedes utilizar una fórmula (que al copiarla hacia abajo muestre todas las soluciones).
  • Ninguna celda debe contener errores.
  • Si la celda no contiene ninguna fecha, debe aparecer el texto «No hay fechas».

Descárgate el archivo para hacer las pruebas. Al responder, sólo escribe la primera fórmula. La probaré arrastrándola hacia abajo y, si funciona, será una respuesta válida…

¡Inténtalo!

 

Extraer fecha de celda1

Si se te hace muy cuesta arriba puedes descubrir las siguientes pistas:

Funciones que podrías utilizar: EXTRAE, MAX, BUSCAR, IZQUIERDA, DERECHA, SI.ERROR, FECHANUMERO, LARGO, ENCONTRAR…

Existen también varias soluciones utilizando fórmulas matriciales.

«?» es el comodín para sustituir un carácter y «*» sirve para reemplazar varios caracteres.

Aquí tienes el archivo para que practiques:

 

RETO 2
Título: RETO 2 (997 clics)
Tamaño: 9 KB

40 comentarios en “Reto 02: Extraer fecha de cualquier celda”

  1. Hola Sergio, esta es mi propuesta:

    =SI.ERROR(EXTRAE($A2;ENCONTRAR(«/»;$A2;1)-2;10);»No hay fechas»)

  2. ¡Hola a todos!

    Puede ser un más exacta esta fórmula a la hora de extraer la fecha:

    =SI.ERROR(–EXTRAE(A2;HALLAR(«??/??/????»;A2);10);»No Hay Fechas»)

    Bendiciones!

  3. Sergio… ese signo lo interpretó la página como un menos… y quise poner un doble signo negativo (para convertir el texto a número). Si no le pones el signo, la fecha quedará extraida como un texto, no como fecha reconocida por excel. Bendiciones!

  4. Silvia Quispe

    Hola a todos…

    Como vi esos excelentes aportes… , me puse a inventar suposiciones..; disculpa Sergio, es que tras lo que ya había, no se me ocurría otra forma..

    Es así:
    ¿Que pasaría si los formatos son 18-02-2015 15-02-15 16/17/2015 6/12/01 ..?
    (no está pensado para formato texto, solo formatos de fecha con números y tampoco está pensado en si el «/» o el «-«, se repetirían en otra parte del texto)…

    Este sería mi aporte: **Fórmula de entrada Matricial:

    = ESPACIOS(EXTRAE(SUSTITUIR(» «&A2,» «,REPETIR(» «,10)), COINCIDIR(45,BUSCAR(CODIGO(EXTRAE(SUSTITUIR(A2,» «,REPETIR(» «,10)),FILA($1:$1000),1)),{45;49}),0)+7,11))

    Tomar en cuenta mi separador de argumentos es la coma, y también mi separador de «la matriz constante: {45;49} «, en mi caso es punto y coma.

    Este es un texto de Hector Miguel:
    con mi win7, español, región: México y Excel en español, las matrices constantes se separan…
    xl-2007: filas => columnas => ;
    xl-2010: filas => ; columnas => ,
    (quizá por esto ultimo asumí que se «estandarizaba» con la notación USA)

    saludos,
    Silvia

    1. Adebua, tu solución solamente sirve para la primera celda. Al copiar las celdas hacia abajo, no encontrará la fecha que pones en la función ENCONTRAR.

  5. Sebastián Encina

    Hola Sergio, dejo aquí mi solución propuesta:

    =SI.ERROR(DERECHA(IZQUIERDA(A2;HALLAR(«/»;A2;1)+7);10);»NO HAY FECHA»)

    Mi separador de listas es el punto y coma ( ; )

  6. Enrique Cianguerotti

    =+SI.ERROR(EXTRAE(A2;ENCONTRAR(«/»;A2;1)-2;10);»No hay fechas»)

  7. Hola Sergio la formula que yo he realizado es {=SI.ERROR(EXTRAE(A2;MIN(SI.ERROR(ENCONTRAR({0;1;2;3;4;5;6;7;8;9};A2);»»));CONTAR(1*EXTRAE(A2;FILA($1:$99);1))+2);»no hay fecha»)}
    a lo mejor es un poco larga pero es la que siempre uso, y me va muy bien.
    un saludo

  8. =SI.ERROR(FECHANUMERO(IZQUIERDA(DERECHA(A2,LARGO(A2)-(HALLAR(«/»,A2)-3)),10)),»Sin Fecha»)

  9. Antonio Perez

    Sergio, esta es mi propuesta de formula
    =MED(A2;HALLAR(«/»;A2;1)-2;10)
    es valida para todos los casos propuestos
    saludos
    Antonio

    1. Aunque te falta la validación en caso de que la celda no contenga una fecha, es perfectamente válida.

      Quien lo necesite, deberá cambiar la función MED por EXTRAE.

  10. Hola, Las soluciones que he visto no controlan que se rechacen fechas inválidas por ser letras (p.e. 31/12/2rr3, aa/11/2000, 01/mm/2000). Con las siguiente fórmula se controlarían estos casos, dándo los ejemplos anteriores como erroneos.

    ==SI(O(ESERROR(–EXTRAE(A2;ENCONTRAR(«/»;A2)-2;2));ESERROR(–EXTRAE(A2;ENCONTRAR(«/»;A2;ENCONTRAR(«/»;A2)+2)-2;2));ESERROR(–EXTRAE(A2;ENCONTRAR(«/»;A2;ENCONTRAR(«/»;A2)+2)+1;4)));»No hay fechas»;EXTRAE(A2;ENCONTRAR(«/»;A2)-2;10))

    Saludos

  11. alicia nuñez

    me da jmuchisima verguenza saber tan poco, solo pude resolverlo con formulas distintas xa cada caso, las ultimas dos con izquierda y derecha anidadas con hallar, y el resto con un mix de anidadas, pero no encontre una formula unica, leyendo las respuestas me doy cuenta de que en hallar tenia que usar «/»,y eso hubiera viabilizado algo, seguire aprendiendo, gracias x enseñarme

  12. Sergio, me funciona con :
    =SI.ERROR(FECHANUMERO(EXTRAE(A2;HALLAR(«/»;A2)-2;10));»No hay fecha»)

  13. Efectivamente, la fórmula de Pepe Pérez ha sido la mejor de todas, pues controla que la fecha sea una fecha válida, rechazando por ejemplo 23/13/2015. ¡Buen aporte!

  14. Estimados. Me puse a revisar una a una sus propuestas, sin embargo, no se tomo en cuenta un texto como este {SEAT KIT_8″, RTFE/GRAPHITE/316 SS, F 28/04/2018 50842} donde se interpone «/» dentro del texto. La única opción que resulto satisfactoria fue la de John Jairo, con su opción si se pudo extraer la fecha.

    Mi propuesta a la opción de John es pasarla de texto a fecha usando la función «VALOR» y formatear la celda con formato de fecha corta.

    =SI.ERROR(VALOR(EXTRAE(A2,HALLAR(«??/??/????»,A2),10)),»No hay fechas»)

    De este modo se extrae la fecha 28/04/2018 como valor de fecha y no como texto.

    Gracias John, me ayudaste mucho.
    Profesor Sergio usted también.

  15. Se me ocurrió esta, funciona para fecha registrada como texto y como número.

    =SI.ERROR(SI(ESNUMERO(A8),TEXTO(A8,»DD/MM/YYYY»),EXTRAE(A8,(ENCONTRAR(«/»,A8)-2),10)),»No hay fechas»)

  16. Eduart Matute

    algo simple
    =SI.ERROR((EXTRAE(Q5;(ENCONTRAR(«/»;Q5)-2);10));»no fecha»)

  17. Eduart Matute

    Encontréuna facil…
    =SI.ERROR((EXTRAE($A2;(ENCONTRAR(«/»;$A2)-2);10));»no fecha»)
    el $ para que no se mueva, pero si no se coloca va bien

  18. Mi propuesta es más simple, pero funciona (creo):
    =EXTRAE(A2;HALLAR(«??/»;A2);10)

    1. ¡Perfecto Germán!
      Funciona correctamente y, como dices es más sencillo.
      El único problema que le veo es que si el día está compuesto de una sola cifra, el resultado no es el esperado…

      1. Corregido y mejorado !
        =SI(ESBLANCO(A2);»No hay fechas»;EXTRAE(A2;HALLAR(«/»;A2)-2;10))

  19. Corregido !!
    =SI(ESBLANCO(A2);»No hay fechas»;EXTRAE(A2;HALLAR(«/»;A2)-2;10))

Los comentarios están cerrados.

Sergio

Sergio

La destreza y el perfeccionismo quizá sean las dos virtudes que me permiten ayudar a mis clientes a facilitar las tareas administrativas de sus negocios.

Ebook De 0 a 100 con macros y VBA

De 0 a 100 con macros y VBA

Esta oferta no es para siempre...

¡no la desaproveches!