Graciela escribió a mi dirección de correo solicitándome la solución a un problema que se le plantea con las fechas: dada una fecha que se encuentra en la celda A1 (puede llegar a ser cualquier fecha), ella necesita que en otra celda le indique el día Lunes de esa semana. Mas claro: hoy es 24/07/2010 (sabado). Entonces, según este planteo, Excel me tiene que decir que fecha correspondió al lunes anterior (en este ejemplo sería: 19/07/2010)
en A1 pusimos la función HOY() y en A3 las funciones que se encargan de calcular cuál fué el lunes anterior a esa fecha.
Sepamos de entrada que Excel permite operaciones matemáticas con fechas, de igual forma que cualquier otro número. Si ingresamos =Hoy()+3 el resultado sería:
epa....
Si, para Excel las fechas son números, y punto. Y ese 40386 solo significa la cantidad de días transcurridos desde el 01/01/1900 a la fecha. Presionando Ctrol + 1 accederemos al menú de Formato de celdas, y allí seleccionaremos el formato mas indicado a nuestras necesidades... en este caso, Fecha:
ahora todo bien, con el formato apropiado.
Al margen de las distintas operaciones matemáticas que podamos llegar a realizar, Excel cuenta con una extensa lista de funciones para el manejo de fechas. Y para resolver el problema de Graciela vamos a utilizar ambas técnicas.
Comencemos. En A1 hay una fecha cualquiera, y en A3 colocaremos el lunes anterior a esa fecha. Como primer medida, ingresamos la funcion:
=FECHA(año, mes, dia)
cada uno de los tres argumentos son números enteros, relativos a la fecha que deseamos armar. Muy útil si tenemos los datos "sueltos" en distintas celdas, ya que los colocamos dentro de la función y excel convertirá esos argumentos individuales en una fecha válida. Un ejemplo:
en E5 poseemos ahora la fecha de tres datos "sueltos"
Hay una función que nos devuelve el numero de dia dentro de la semana. Esta es:
=DIASEM(fecha, [tipo])
Fecha: cualquier numero de serie
Tipo: este argumento es opcional y acepta tres posibles valores:
1- dia domingo será 1 y el sábado 7
2- dia lunes será 1 y el domingo 7
3- dia lunes será 0 y el domingo 6
Al ser opcional, el valor por defecto que toma Excel es 1, si lo omitimos.
Para verla en acción, nada mejor que un ejemplo:
24/07/2010 = sabado, por ende, el 6to día de la semana, ya que puse como segundo argumento 2. (aqui en Argentina se considera: Lunes=1 / Domingo=7)
Si ahora "mezclamos" todo, la función en A3 que soluciona el panteamiento es:
=FECHA(AÑO(A1);MES(A1);DIA(A1)-DIASEM(A1;2)+1)
Explicacion: tomo el anio, mes y dia de A1 con la funcion FECHA(). Al útlimo argumento (que es donde está el "truco")de esta función le resto el numero de día de la semana que ocupa. Y como cae Domingo, le sumo la constante 1, para que se pase al lunes.
El dia de A1 me devuelve 24.
El DIASEM() de A1 me devuelve 6
Si hago 24 - 6 obtengo 18
Luego: 18 + 1 = 19.
Y ese 19 (que es el resultado de las operaciones arriba descriptas) lo utilizo como tercer argumento de la función FECHA(). Y, efectivamente, el lunes anterior al sábabo 24 de julio de 2010... cayó 19.
Voy a cambiar el formato de A1 y A3, ingresando luego distintas fechas en A1, para que observen como siempre A3 posee el lunes anterior:
Puede suceder que necesitemos una lista con todos los lunes "futuros" o "pasados" a la fecha ingresada en A1, y es aquí donde con una simple suma solucionamos el tema. A la fecha obtenida solamente le sumamos 7.... y luego arrastramos la funcion hasta donde querramos:
Verán como es muy sencillo ahora calcular cual fué, por ejemplo, el útlimo día del mes y si este fué o no un día laborable.
Graciela me comenta sobre otro inconveniente. Ella tiene sus datos, por ejemplo, en la hojaXXX, pero no es la que en realidad vé el usuario final. Refleja todos los datos de la hojaXXX en la hoja "BalanceSemanal" y cuando concatena fechas con texto le sucede lo siguiente:
cuando concatena texto con fecha.... esta última nos aparece en formato "general", y por mas que intentemos darle otro formato el resultado será siempre "malo".
Esto se soluciona de varias formas. La mas sencilla, haciendo uso de la funcion:
=TEXTO(valor, formato)
Mediante el uso de esta función Excel toma el primer argumento y le dá el formato que le especifiquemos en el segundo. Vale aclarar que no solo sirve para fechas, si no para cualquier tipo de numeros.
En este caso:
="Fecha de origen: "&TEXTO(A1;"dd/mm/y")
o
="TotalesdelLunes:"&TEXTO(FECHA(AÑO(A1);MES(A1);DIA(A1)-DIASEM(A1;2)+1);"dd/mm/yyyy")
Lo único que varía es el formato que apliqué. En el primer caso: dd/mm/y, en el segundo: dd/mm/yyyy, lo que hará que cambie la forma de mostrar el anio:
Bueno gente, espero que esta consulta de Graciela les haya servido y puedan aplicarla a sus proyectos. El mundo de las operaciones con fechas en Excel es interminable. Queda abierto el post a futuras consultas.
Suerte.
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Funciones
Etiquetas:
Funciones
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
gracias damiano!!! ni bien recibi tu mail con el link abri el post. me solucionaste el problema y te lo agradezco enormemente.
ResponderEliminarnecesito un favor mas si es posible. estuve leyendo tu post sobre archivos de texto y creo que me podes ayudar. me pasan unos txt o cvs que poseen varios campos, entre ellos uno numerico decimal. pero vienen con este formato: 123,645.73 cuando yo tengo la configuracion regional distinta, la coma es el separador de miles. me trae muchos problemas por que excel lo toma como texto y yo necesito numeros. gracias
(si podes tambien avisame por mail que lo tengo habilitado en mi celular y me avisa enseguida) ah y necesito hacerlo sin macros.
Graciela: te dejo dos posibles soluciones, ambas sin utilizar macros. Una es bastante "manual" y la otra hace uso de un par de funciones anidadas.
ResponderEliminaravisame que tal te fué.
http://damianexcel.blogspot.com/2010/07/texto-numero-con-excel-cambiando-el.html