Procedimiento con rangos complicado

20/04/2005 - 11:59 por Rantamplan | Informe spam
Bueas grupo,
a ver si consigo explicarme de manera que me podais entender:

Tengo un rango (a1:a61) que contiene 60 valores que se van actualizando
cada minuto.

En la celda a62 calculo la media de los 60 valores anteriores.

Tengo 3 columnas etiquetadas 'Hora1 (b1:b61)','Hora2(c1:cs1)','hora3
(d1:ds1)' que deben ir recogiendo las diferentes medias almacenadas en la
celda a62 de la siguietne manera:

-Primer minuto de ejecución: Se calcula la primera media y ésta es copiada
dentro de 'Hora1' en su primera celda (b1).
-Segundo minuto de jecución. Se calcula la media y ésa es copiada dentro de
'Hora1' en su segunda celda (b2).
-Cuando se rellenen las 60 celdas de 'Hora1' pasará a rellenar 'Hora2' y
así sucesivamente

Alguna idea de como solucionar esto???

He estado mirando el trabajar con rangos a través de VBA pero no tengo muy
claro como plantearmelo.

Gracias de antemano ;-)
Salu2!.

Preguntas similare

Leer las respuestas

#11 Rantamplan
20/04/2005 - 23:13 | Informe spam
"Fernando Arroyo" Escribió el día mié 20
abr 2005 07:26:30p:

"Rantamplan" escribió en el mensaje
news:
"Fernando Arroyo" Escribió el día


mié 20
abr 2005 05:55:18p:

Ok, muchisismas gracias por el codigo, voy a probarlo y te
cuento... El problema que le veo (corrigeme si me equivoco) es que
se tiene






que
cerrar y volver a abrir el libro para que se actualicen los datos y
la



hoja esta no puede cerrarse!.
La hoja es crítica ya que va recogiendo los datos de un autómata







constántemente y supondría la pérdida de datos en ese






pequeño
lapsus de
tiempo :-(

Salu2!.



No, eso no es así. Lo único que hay que hacer es abrir el libro




una
sola vez, para que se ejecute el código que hay en el evento
Workbook_Open, y, de hecho, bastaría con ejecutar dicho código a




mano
(una sola vez) para que los eventos de la consulta quedaran




activados.

Una vez ejecutado dicho código, el evento AfterRefresh de la




consulta
seguirá disparándose indefinidamente cada vez que se actualice la
consulta. Un saludo.


Fernando Arroyo
MS MVP - Excel




Al abrir el libro me salta un error de VB:
'Se ha producido el error '9' en tiempo de ejecución:
Subindice fuera del intervalo
Si le doy a depurar me salta al procedimiento Workbook_Open,


resaltandome
en amarillo la linea de codigo que contiene.

Salu2!.



¿Pero entonces los datos no los obtienes mediante una consulta? Me
refiero a una creada desde Datos > Obtener datos externos > Nueva
consulta de base de datos. Yo pensaba que estábamos hablando de una
consulta de este tipo en la que se había establecido que se
actualizara cada minuto. Si se trata de otra cosa, el código no te va
a servir. Un saludo.


Fernando Arroyo
MS MVP - Excel



La consulta no es creada de esa forma, es mediante un software de
terceros que instala un añadido en el Excel, que crea unas funciones
Query para consultar datos en un PC remoto, que vuelca los datos en la
hoja esta. No se utiliza el procedimiento de 'Obtener Datos'.
Perdon por no haber especificado lo de la consulta, no lo tube en cuenta
cuando plantee el problema :-(

He estado haciendo pruebas con 'Worksheet_change' y parece que funciona,
pero me atasco en el momento de tener que controlar el paso del valor a
las celdas sobre las que copiar. Ya que no sé como hacer para que
controle sobre que celda se ha copiado el valor y como pasar a la
siguiente.

De todas maneras, si hay otra manera mas optima hacerlo sin utilizar
'Worksheet_change' no dudes en decirmelo, que a buen seguro me seran de
mucha ayuda ;-)

Gracias por la atención y perdona por mi descuido al no explicartelo
correctamente.
Respuesta Responder a este mensaje
#12 Fernando Arroyo
21/04/2005 - 09:10 | Informe spam
El evento Worksheet_Change es una buena opción. El problema que yo veía es que si hubiéramos estado hablando de una consulta de las que se crean desde el menú Datos, dicho evento no se dispararía. Pero si ya has comprobado que se dispara al cambiar la celda A62, puedes usar el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.[A62]) Is Nothing Then Exit Sub

With WorksheetFunction
If .CountA(Me.[B1:B60]) = 60 Then
If .CountA(Me.[C1:C60]) = 60 Then
If .CountA(Me.[D1:D60]) = 60 Then
MsgBox "Error: rango B1:D60 lleno"
Else
Me.Range("D" & .CountA(Me.[D1:D60]) + 1) = Me.[A62].Value
End If
Else
Me.Range("C" & .CountA(Me.[C1:C60]) + 1) = Me.[A62].Value
End If
Else
Me.Range("B" & .CountA(Me.[B1:B60]) + 1) = Me.[A62].Value
End If
End With
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel

"Rantamplan" escribió en el mensaje news:
La consulta no es creada de esa forma, es mediante un software de
terceros que instala un añadido en el Excel, que crea unas funciones
Query para consultar datos en un PC remoto, que vuelca los datos en la
hoja esta. No se utiliza el procedimiento de 'Obtener Datos'.
Perdon por no haber especificado lo de la consulta, no lo tube en cuenta
cuando plantee el problema :-(

He estado haciendo pruebas con 'Worksheet_change' y parece que funciona,
pero me atasco en el momento de tener que controlar el paso del valor a
las celdas sobre las que copiar. Ya que no sé como hacer para que
controle sobre que celda se ha copiado el valor y como pasar a la
siguiente.

De todas maneras, si hay otra manera mas optima hacerlo sin utilizar
'Worksheet_change' no dudes en decirmelo, que a buen seguro me seran de
mucha ayuda ;-)

Gracias por la atención y perdona por mi descuido al no explicartelo
correctamente.



Respuesta Responder a este mensaje
#13 Rantamplan
21/04/2005 - 18:55 | Informe spam
"Fernando Arroyo" Escribió el día jue 21
abr 2005 09:10:18a:

El evento Worksheet_Change es una buena opción. El problema que yo
veía es que si hubiéramos estado hablando de una consulta de las que
se crean desde el menú Datos, dicho evento no se dispararía. Pero si
ya has comprobado que se dispara al cambiar la celda A62, puedes usar
el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.[A62]) Is Nothing Then Exit Sub

With WorksheetFunction
If .CountA(Me.[B1:B60]) = 60 Then
If .CountA(Me.[C1:C60]) = 60 Then
If .CountA(Me.[D1:D60]) = 60 Then
MsgBox "Error: rango B1:D60 lleno"
Else
Me.Range("D" & .CountA(Me.[D1:D60]) + 1) > Me.[A62].Value
End If
Else
Me.Range("C" & .CountA(Me.[C1:C60]) + 1) > Me.[A62].Value
End If
Else
Me.Range("B" & .CountA(Me.[B1:B60]) + 1) = Me.[A62].Value
End If
End With
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel




Ok,
Voy a probarlo y en cuanto lo tenga listo te comento a ver que tal va
Muchisimas gracias por la ayuda,
Salu2!.
Respuesta Responder a este mensaje
#14 Rantamplan
21/04/2005 - 19:16 | Informe spam
Rantamplan Escribió el día jue 21 abr 2005
06:55:59p:

"Fernando Arroyo" Escribió el día jue


21
abr 2005 09:10:18a:

El evento Worksheet_Change es una buena opción. El problema que yo
veía es que si hubiéramos estado hablando de una consulta de las que
se crean desde el menú Datos, dicho evento no se dispararía. Pero si
ya has comprobado que se dispara al cambiar la celda A62, puedes usar
el siguiente código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.[A62]) Is Nothing Then Exit Sub

With WorksheetFunction
If .CountA(Me.[B1:B60]) = 60 Then
If .CountA(Me.[C1:C60]) = 60 Then
If .CountA(Me.[D1:D60]) = 60 Then
MsgBox "Error: rango B1:D60 lleno"
Else
Me.Range("D" & .CountA(Me.[D1:D60]) + 1) >> Me.[A62].Value
End If
Else
Me.Range("C" & .CountA(Me.[C1:C60]) + 1) >> Me.[A62].Value
End If
Else
Me.Range("B" & .CountA(Me.[B1:B60]) + 1) = Me.[A62].Value
End If
End With
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel




Ok,
Voy a probarlo y en cuanto lo tenga listo te comento a ver que tal va
Muchisimas gracias por la ayuda,
Salu2!.



Probado y funcionando a la perfección. ;-)
Thanks!!
Salu2!.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida