Saltar al contenido

Macro para copiar un rango de datos definido por una fecha de inicio y una fecha final.


Recommended Posts

publicado

Buenos días:

Dispongo de un libro con dos hojas. Una de ellas con nombre "Data" y la otra con nombre "Data processing".hoja data

En la hoja "Data" tengo 6 columnas con los siguientes datos: A (fecha), B (horas), C (irradiación), D (Temperatura), E (humedad) y en F (Viento).

En la celda G1 me gustaría colocar la fecha de inicio (por ejemplo, 01/03/2012 00:10) y en la celda G2 la fecha final (por ejemplo, 01/07/2012 14:10).

El objetivo de esta macro quiero que sea la de que copie los datos desde la fecha de inicio hasta la fecha final y que los coloque en la hoja "data processing".

Con mis limitados conocimientos de programación VBA solo alcanzo a realizar la copia de un rango FIJO de datos y pegarlos en otra hoja pero necesito que el rango sea variable y definido por esas dos celdas.

He intentado colgar un excel de ejemplo, pero no se porque razón, no me deja colgarlo (me pone archivo invalido), pero creo que se entiende el problema.

Un saludo y gracias de antemano

publicado

Te paso la macro:Sub Macro1()

'

' Macro1 Macro

Dim DATO(6)

MÍNIMO = Sheets("DATOS").Range("J3")

MÁXIMO = Sheets("DATOS").Range("J4")

FILA = 1

For R = 2 To 540

If R = 289 Then Stop

'LEE LA FECHA Y LA DESECHA SI NO ESTÁ EN EL INTERVALO

FECHA = Sheets("DATOS").Cells(R, 1)

If FECHA > MÁXIMO Or FECHA < MÍNIMO Then GoTo VUELTA

'-------------------LEE DATOS

For V = 1 To 6

DATO(V) = Sheets("DATOS").Cells(R, V)

Next V

FILA = FILA + 1

'-----------ESCRIBE

For V = 1 To 6

Sheets("INTERVALO").Cells(FILA, V) = DATO(V)

Next V

VUELTA:

Next R

'

End Sub

- - - - - Mensaje combinado - - - - -

Quítale a la macro la línea que contiene el stop. Era una prueba

publicado

Muchas gracias por tu rápida respuesta JMCPBG pero lamento decirte que no me funciona. Quizás me haya explicado mal.

El objeto de esta Macro es la de copiar los datos que existan dentro del intervalo de dos fechas. Estas dos fechas quiero que sean modificables para poder coger distintos intervalos y quiero copiarlos en la otra hoja que pone intervalos.

Si cambio de fecha de inicio, quiero que también cambie el intervalo a copiar. No se si se podrá hacer eso pero la macro que me has enviado no me hace nada. (ya he eliminado la fila donde pone "stop" y sigue sin funcionar).

Muchas gracias por tu ayuda. Un saludo

publicado

Hola RORO1981:

El excel que me enviaste es perfecto. Eso es exactamente lo que quiero, pero al pasarlo a mi documento (excel 2010) deja de funcionar.

En la macro he visto que denominas a las hojas no por el nombre que tienen (Datos e Intervalo) sino como Hoja1 y Hoja2. He intentado cambiar el comando, por ejemplo (Hoja1.Activate por Worksheets(""Datos").Activate) ya que dispongo de unas cuantas hojas.

¿Sabes cual podría ser el problema? ¿Las lineas de programación son diferentes entre excel 97-2003 y excel 2010?

Un saludo y gracias por el aporte.

publicado

pero que error te da especificamente en excel 2010?

en relacion al nombre de las hojas, hoja1 es el nombre de pila podriamos decir de cada hoja o sea si le cambias el nombre a la hoja no interfiere en la programación y para referirte por el nombre de la hoja basta con que pongas:

Sheets("Datos").Activate

Saludos

publicado

Buenos días:

Para comprobar el buen funcionamiento de esta macro, la he copiado y pegado en otro libro con los mismos datos y configuración de hojas, pero en un excel 2010.

Esta vez no sale ningún error, pero a la hora de filtrar no lo hace bien, ya que en la hoja de "Intervalo" solo aparece los encabezados y no realiza ningún filtro.

También aparecen en las celdas "n2" y "o2" los siguientes datos respectivamente ">=2012-08-01" y "<=2012-08-03". (En el excel que me enviaste esto no aparecía).

Creo que puede ser por la siguiente linea de programación:

'Coloca los criterios para efectuar el filtro avanzado'

desde = Hoja1.Range("j3").Value

hasta = Hoja1.Range("j4").Value

Hoja1.Range("n2") = ">=" & Format(desde, "yyyy-mm-dd")

Hoja1.Range("o2") = "<=" & Format(hasta, "yyyy-mm-dd")

Hoja1.Activate

Muchas gracias por las molestias y de verdad que intento solucionarlo por mis propios medios, pero como ya dije anteriormente, mis conocimientos sobre VBA son escasos.

Muchas gracias de nuevo y siento las continuas molestias.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.