jueves, 5 de agosto de 2021

Corrección de fechas importadas desde formato MMDDAAAA en hoja de cálculo

Si una de las peores cosas que nos puede pasar en una hoja de cálculo como Mícrosoft Excel es importar incorrectamente las fechas en formato Americano MMDDAAAA, como formato Europeo.

Peor es aún recibir un listado ya importado y no tener acceso a los datos originales para realizar una reimportación.

Hoy os mostraré un método para solucionarlo mediante fórmulas.

Mañana veremos un método mucho más rápido, pero el de hoy no permite ver la aplicación de algunas fórmulas.

La solución será la fórmula que muestro en la imagen, sin embargo vamos a desarrollarla y explicarla paso a paso.



Lo primero que debemos tener claro es que nos enfrentamos a una columna con una mezcla de textos y números, dependiendo de si la hoja de cálculo ha reconocido la fecha (en cuyo caso se comportará como un número) o si no la ha reconocido (en este caso simplemente se tratará como un texto).

Podemos verlo claramente si ampliamos el ancho de la columna, en este caso se alinearán a la derecha los datos reconocidos como fechas y a la izquierda los que no.

Si aplicamos un filtro veremos que algunos datos no se acumulan, son los que no se han reconocido como fechas.


La primera aproximación parece extraer los datos de Meses, Días y Años de la cadena de texto y luego concatenarlos en el orden correcto.

Para extraer el día, usamos la función extrae.

=EXTRAE(A2;4;2")


Pero al intentar extraer el mes de la primera fecha el dato obtenido no se corresponde con el mes.


Si arrastramos la fórmula a todas las filas, vemos que algunas si coinciden, en concreto las que están alineadas a la izquierda.


Si cambiamos el formato de los datos de la columna a Número, tendremos una pista de que está pasando.


Ahora vemos que los datos extraídos se corresponden con la fecha en formato número.


Para hacer lo que deseamos, el primer paso será partir de un tipo de datos comunes.

Para ello, vamos a pasar todos los datos a formato texto usando la función texto.

=TEXTO(A2;"DD/MM/AAAA")


Al ver el resultado de la fórmula, parece que nada a pasado, pero podemos ver que ahora ha cambiado la alineación.


Ahora toda la columna se muestra, por defecto, alineada a la izquierda, esto demuestra que ahora todos los datos son textos.


Ahora que todos los datos son del mismo tipo, podemos usar las funciones de texto para obtener días, meses y años.

Para ello usaremos las funciones Extrae, Izquierda y Derecha.


Concatenamos los datos, sin olvidar incluir los separadores, en este caso la barra.

=EXTRAE(B2;4;2)&"/"&IZQUIERDA(B2;2)&"/"&DERECHA(B2;4)


Ahora vemos que el mes y el año han intercambiado posición.


Incluso para las fechas que no se habían reconocido.


Sin embargo si aplicamos un filtro, vemos que los datos no se acumulan.

Esto nos da una pista de que lo que estamos tratando para la hoja de cálculo (Microsoft Excel, Libreoffice Calc o Google Sheets) está tratando las fechas como textos.

Aprovecharemos la función Valor para convertir el texto en su valor numérico.


Usando valor, obtenemos un número que representa la fecha. 

=VALOR(C2)


Como ya explicamos, las hojas de cálculo representan las fechas con un número que indica el número de días que han pasado desde una fecha de origen, usualmente el 01/01/1900. 

Cambiamos el formato de la columna a fecha corta para ver los datos en el formato deseado.


Finalmente obtenemos las fechas en el formato correcto.


Para confirmarlo, aplicamos un filtro y comprobamos que, ahora si, todos lo datos se agrupan en años y meses correctamente.


Este proceso se ha realizado en tres pasos.



Pero puede resumirse en un único paso.



En este caso se pueden agrupar todos los pasos en uno solo.

=VALOR(EXTRAE(TEXTO(A2;"DD/MM/AAAA");4;2)&"/"&IZQUIERDA(TEXTO(A2;"DD/MM/AAAA");2)&"/"&DERECHA(TEXTO(A2;"DD/MM/AAAA");4))


En este ejercicio hemos resuelto un problema, convirtiendo en primer lugar todos los datos a texto, para procesarlos de forma uniforme, y luego volviendo a transformar los resultados a número y fecha.

En ocasiones es más sencillo dar un rodeo para resolver un problema de forma homogénea, en lugar de aplicar funciones lógicas para cada caso diferente.

 

No hay comentarios:

Publicar un comentario