Matriz, coleccion o algo parecido

08/11/2009 - 11:25 por Ignacio Perez | Informe spam
Hola a todos:
Tengo un bucle para dar color a un rango dinamico por filas alternativas:

Filas = Hoja2.Application.WorksheetFunction.CountA([A11:A65535])
For i = 11 To Filas + 11 Step 2

With Hoja2.Range("A" & i & ":" & "B" & i).Interior
.ColorIndex = 34
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With

With Hoja2.Range("A" & i + 1 & ":" & "B" & i + 1).Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Next
Que queda muy bonito pero resulta bastante ineficiente cuando las filas
pasan de 10000 y el PC anda justito de recursos (1 minuto de espera).
Quiero saber si existe algun metodo mas rapido para conseguir esto. He
probado con una matriz pero no me ha llegado a funcionar (deberia estudiar
mas, jejeje)

Saludos

Preguntas similare

Leer las respuestas

#1 Ignacio Perez
08/11/2009 - 19:36 | Informe spam
Vaya¡¡¡ ya he reducido el tiempo a la mitad dando un color base a todo el
rango y luego el otro color a filas alternativas mediante el bucle:

Filas = Hoja2.Application.WorksheetFunction.CountA([A11:A65535])
With Hoja2.Range("A11:" & "B" & Filas + 11).Interior
.ColorIndex = 34
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
For i = 11 To Filas + 11 Step 2
With Hoja2.Range("A" & i + 1 & ":" & "B" & i + 1).Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Next

Pero mi pregunta sigue siendo la misma ¿si crease una coleccion o Array,
mediante un bucle claro, y luego aplicase el color a todas estas filas de un
plumazo, ganaria velocidad de ejecucion?
un ejemplito estaria fenomenal.
Gracias





"Ignacio Perez" wrote:

Hola a todos:
Tengo un bucle para dar color a un rango dinamico por filas alternativas:

Filas = Hoja2.Application.WorksheetFunction.CountA([A11:A65535])
For i = 11 To Filas + 11 Step 2

With Hoja2.Range("A" & i & ":" & "B" & i).Interior
.ColorIndex = 34
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With

With Hoja2.Range("A" & i + 1 & ":" & "B" & i + 1).Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Next
Que queda muy bonito pero resulta bastante ineficiente cuando las filas
pasan de 10000 y el PC anda justito de recursos (1 minuto de espera).
Quiero saber si existe algun metodo mas rapido para conseguir esto. He
probado con una matriz pero no me ha llegado a funcionar (deberia estudiar
mas, jejeje)

Saludos
Respuesta Responder a este mensaje
#2 Héctor Miguel
09/11/2009 - 02:13 | Informe spam
hola, Ignacio !

... ya he reducido el tiempo a la mitad dando un color base a todo el rango y luego el otro color a filas alternativas mediante el bucle:
Pero mi pregunta sigue siendo la misma
si crease una coleccion o Array, mediante un bucle claro
y luego aplicase el color a todas estas filas de un plumazo, ganaria velocidad de ejecucion?
un ejemplito estaria fenomenal...



podrias incluso evitar el uso de codigo (lento o agil) si aplicas el color por formatos condicionales:
- condicion de fornula (p.e.) =residuo(fila(),2)

o para aplicar a un rango dinamico (de/creciente)...
- encuentra la forma de poner en una celda cual es la "ultima" fila a colorear (p.e. en [A3])
- selecciona TODA la columna a partir del rango a colorear y al formato condicional
- condicion de formula (p.e.) =y(fila()<=$a$3,residuo(fila(),2))

saludos,
hector.
Respuesta Responder a este mensaje
#3 Héctor Miguel
10/11/2009 - 04:49 | Informe spam
hola, Ignacio !

... ya he reducido el tiempo a la mitad dando un color base a todo el rango y luego el otro color a filas alternativas mediante el bucle:
Pero mi pregunta sigue siendo la misma
si crease una coleccion o Array, mediante un bucle claro
y luego aplicase el color a todas estas filas de un plumazo, ganaria velocidad de ejecucion?
un ejemplito estaria fenomenal...



podrias incluso evitar el uso de codigo (lento o agil) si aplicas el color
por formatos condicionales:
- condicion de fornula (p.e.) =residuo(fila(),2)

o para aplicar a un rango dinamico (de/creciente)...
- encuentra la forma de poner en una celda cual es la "ultima" fila a
colorear (p.e. en [A3])
- selecciona TODA la columna a partir del rango a colorear y al formato
condicional
- condicion de formula (p.e.) =y(fila()<=$a$3,residuo(fila(),2))

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida