Días entre fechas determinadas
Si quiero conocer cuantos días hay entre dos fechas determinadas y ponerlas en una macro, ¿cuál seria la sentencia?, por ejemplo tengo datos de temperatura que vienen por fecha, ¿estos datos empiezan el 03/04/1961 y terminan el 11/12/2009, si quisiera saber cuantos datos hay entre el 01/01/1970 y el 31/12/1990 como haría la macro? En la columna A están las fechas y en la columna B los datos de temperatura solo que aquí no todos los días tienen dato, espero no sea una molestia y te lo agradezco de antemano.
1 Respuesta
No es necesario que uses una macro, puedes usar uma función que el ceporro que tradujo Excel al castellano la tradujo mal.
Pon formato de fecha en las celdas A1y A2 y escribe las fechas
Y en la casilla A3 pon la función
= SIFECHA(A1; A2; "d")
Si pese a eso quieres hacerlo con macro pon en A3 la función
días(A1;A2)
Y en un módulo de Visual basic escribe esta función
Function días(a, b As Date) As Integer
días = DateDiff("d", a, b)
End Function
En concreto para los días
01/01/1970 y 31/12/1990
La diferencia de días e
7669
Ok, por supuesto que me sirve, gracias. Ahora te comento mas dudas que son parte de este mismo problema, con lo que me acabas de decir ya tengo el numero total de días entre esas dos fechas, como te comento en el problema, en mi variable tengo datos de temperatura y necesito saber en ese periodo cuantos días tienen datos (celdas con números) y cuantos no (celdas con la leyenda "Nulo") para al final calcular un porcentaje de días con datos que me definan si utilizo esos datos o no. Aclarando, lo necesito para una macro porque estoy automatizando el procedimiento ya que tengo mas de 200 archivos en los cuales aplicar este procedimiento.
agradezco tu respuesta de antemano
saludos
Para contar el número de celdas también se puede hacer mediante función Excel o mediante macro. Hay que proporcionar el rango de las celdas que queremos calcular. No sé si los datos los tienes por filas, columnas o ambos. Si es por ambos el rango será un rectángulo, no vale tomar menos datos en la primera o ultima fila
Si el primer dato está en A1 y el último en A1000 la función sería
= CONTARA(A1: A1000)
Mientras que por macro sería esta función dentro de Visual basic
Application. WorksheetFunction. CountA(range(A1:A1000))
Ten en cuenta que la función anterior da los días contando solo el primero o último, si entran los dos tienes que contar un día más.
Y el porcentaje serán los días con dato entre los totales y eso multiplicado por 100. Si me facilitas más datos te doy la expresión exacta.
Entiendo, los datos están en columnas, en la columna A están las fechas y en la columna B los datos, por ejemplo:
FECHA (Columna A) TEMP (Columna B)
01/01/1952 24
02/01/1952 Nulo
.
.
.
21/12/2011 15
Dentro del rango de la columna A, necesito buscar los días que están entre el 01/01/1961 y 31/12/1990, una vez que localizo ese intervalo, necesito calcular cuantos días tienen datos (números) y cuantos no (Nulo), localizados en la columna B. estos datos pueden quedar registrados en cualquier celda, generalmente los coloco al final de la columna, pero pueden estar en las siguiente columnas vacías (a partir de la columna C, por ejemplo). otro dato importante es que cada archivo sobre el que voy a ejecutar la macro no empieza ni termina en la misma fecha (la fecha es variable), unos empiezan antes o después y terminan antes o después de las fechas que te pongo como ejemplo, por lo que el rango seria variable según el numero de datos, no fijo como lo ilustras (negritas).
Application.WorksheetFunction.CountA(range(A1:A1000))
lo que si es regular es que los datos empiezan a partir de la celda A2, pero terminan según la fecha de captura que es variable.
si es necesario te envío un archivo para que lo veas y parte de la macro que tengo
saludos y disculpa las molestias
Si, lo mejor será que me mandes un fichero y pones en él el lugar donde deben ir los cálculos.
Tenia la duda de si puede haber celdas nulas en las fechas, pero si me lo mandas lo sabré todo.
Mándalo a
Pon como asunto el título de la pregunta.
Y dices que el fichero de excel se obtiene ejecutando esa macro. Pues a mi no me funciona, me da un error d eno coincidencia de tipos en
Do While ActiveCell.Value <> ""
valor = ActiveCell.Offset(-1, 0).Value + 1
Ya que estás sumando una fecha y un número.
No sé como tú lo has podido hacer con esa macro. Si yo quiero que me funcione tendré que modificar esa parte para poder empezar a hacer algo. Porque al pararse ahí la hoja queda a falta de la parte final.
Es raro, la ejecute en dos archivos y corre pero bueno si es necesario corregirla adelante no hay problema, lo checo en otra pc y si encuentro algo te digo.
saludos
Mandame el libro que usas tu para generar los ficheros de excel, a ver si esa me funciona a ni. Que es que no tengo claro como hay que modificarla. Veo columnas con la fecha dd-mm-aaaa y otras con la fecha mm-dd-aaaa en el fichero inacabado antes de terminar la macro. Mientras que el que me mandabas tu tenía bien todas las fechas.
te acabo de enviar un correo, describiendo donde creo que esta el error, es en la primera linea de la macro a la hora de importar los archivos de txt a excel. Habría que modificarla, Los archivos que originalmente necesito son los txt, ahi vienen correctas las fechas, acabo de ver que si lo importo a excel con la macro, modifica lo que tu mencionas y si lo importo a "mano" conserva el formato y corre la macro sin problema. aunque lo que me importa generar en la macro, es la forma de calcular lo que esta en amarillo puedes utilizar el archivo que ya esta en excel porque ese ya esta completo.
Lo que pretendo hacer una vez que tenga la parte que me falta es darle instrucciones para que ejecute la macro a todos los archivos txt que tengo en una carpeta que son como 200, ya que no quiero hacerlo uno por uno.
saludos
He tenido que hacer maravillas para poder ejecutar la macro.
Primero importo el fichero a mano, pero cuidando de cambiar algunos datos como el idioma que dice japonés por europeo occidental y haciendo que la columna A tenga formato de fecha. Es que no sé que manía tenia de tomar unas fechas en formato español y otras en inglés.
Luego selecciono la columna A y le digo que tiene formato de número. Después ejecuto la macro a la que he quitado la orden de abrir el libro. Y después vuelvo a decirle que la columna A tiene formato de fecha.
Voy a hace todo eso grabando la macro para ver si podemos hacer cambiando trozos una macro que lo haga todo de golpe.
Pero ten paciencia, además aquí ya es muy tarde y estoy cansado.
Me estoy volviendo loco con alguna fórmula que usas.
Dime qué entiendes por celda sin datos y celda con datos, porque a la hora de sumarlas no dan nunca las 17511 que sería enl total. La verdad es que no lo entiendo.
solo se refiere a contar las celdas que tienen numero (esas las considero como dato) y las que no tienen dato son las que aparecen con texto "Nulo", o sea cuantas celdas de cada columna (excepto columna A donde vienen las fechas) tienen numero y cuantas tienen "Nulo" o texto,
saludos
Es que creo que sería más sencillo, contaba las que tienen número y esas son con dato y las sin dato son el número total de celdas menos las que lo tienen. De esa forma la suma de ambas sería el total de celdas y lo que me sale es
17511 17511 17511 17511 1576 13321 1610 1585 14884 548 9235 9019
¿Te sale a ti lo mismo?
Es que no entiendo por qué no suman 17511, puede que las funciones que usas no sean las correctas o que las celdas tengan formatos raros. Pero he cambiado esas columnas a número y el resultado es el mismo.
Yo si acaso probare con un fichero pequeño para poder contar a mano si esta bien o mal. Pero todo esto ya tiene qu ser mañana que aquí ya lo es porqueue son las 6:30
Ya veo lo que pasa. Al importar los números con punto decimal los considera como texto ya que el separador tendría que ser la coma, entonces esos números nbo son ni números ni nulos y por eso pasa eso. Creo que se puede solucionar especificando eso bien en la importación.
- Compartir respuesta