Descargar el fichero: Listado.xlsm
Hemos creado siete sistemas para que mediante macro llevemos cierto cálculo a una columna de una hoja. Los primeros cinco sistemas toman el valor de una celda calculada en la Hoja para llevarla a una columna a medida que toma diferentes valores el cálculo. Para simplificar hemos tomado el cálculo de un número aleatorio con la función =ALEATORIO(), pero la celda que tomamos podría ser, en general, cualquier otro valor que se obtenga en una hoja de Excel con cálculos mucho más complicados. Los dos últimos sistemas no toman el valor de una celda de la hoja sino que calculan, en nuestro caso, el número aleatorio desde la propia macro con RND. Será mucho más rápido que los cálculos los haga la macro internamente, y no la hoja de Excel, aunque somos conscientes de que en muchas ocasiones lo interesante es disponer de la Hoja de Excel toda su potencia de cálculo, y su organización intuitiva de los datos.
Hemos tomado tiempos para determinar el sistema más rápido, y gana de forma abrumadora el de la Hoja6. Para 1.000 datos generados los tiempos, en mi portátil, han sido los siguientes:
- Hoja1: 10 segundos
- Hoja 2: 3 segundos
- Hoja 3: 3 segundos
- Hoja 4: 2 segundos
- Hoja 5: 6 segundos
- Hoja 6: 0 segundos
- Hoja 7: 3 segundos
La Hoja6 da como resultado 0 segundos, ya que no llega a un segundo.
Para la Hoja6, si en lugar de pedir un listado de 1.000 datos, pedimos 1.000.000 de datos vemos que tarda 5 segundo. Por tanto, la Hoja6 contiene la macro (Listado6) más rápida con mucha diferencia.
Hoja 1
Código:
Sub Listado1() Dim i As Long 'Activamos la Hoja1 Sheets("Hoja1").Activate 'Tiempo Range("C12") = Now 'Borramos todo lo que hay en la columna F Columns("F:F").ClearContents 'Generamos la Lista 'copiando y pegando con pegado especial valores For i = 1 To Range("D6") Range("D4").Copy Cells(i, "F").PasteSpecial xlPasteValues Next i 'Para quitar la linea de hormigas Application.CutCopyMode = False Range("C13") = Now 'Situamos el cursor en la celda A1 Range("A1").Select End Sub
Hoja 2
Código:
Sub Listado2() Dim i As Long Sheets("Hoja2").Activate Range("C12") = Now Columns("F:F").ClearContents For i = 1 To Range("D6") Cells(i, "F") = Range("D4") Next i Application.CutCopyMode = False Range("C13") = Now Range("A1").Select End Sub
Hoja 3
Código:
Sub Listado3() Dim i As Long Dim A Dim n As Long Sheets("Hoja3").Activate Range("C12") = Now n = Range("D6") ReDim A(n) Columns("F:F").ClearContents For i = 1 To n A(i) = Range("D4") Cells(i, "F") = A(i) Next i Application.CutCopyMode = False Range("C13") = Now Range("A1").Select End Sub
Hoja 4
Código:
Sub Listado4() Dim i As Long Dim R As Range Dim A Dim n As Long Sheets("Hoja4").Activate Range("C12") = Now n = Range("D6") Set R = Range("F1:F" & n) A = R Columns("F:F").ClearContents 'Generamos la matriz A For i = 1 To Range("D6") Calculate A(i, 1) = Range("D4") Next i 'Depositamos los datos de la matriz A en la columna F Range("F1:F" & n) = A Range("C13") = Now End Sub
Hoja 5
Código:
Sub Listado5() Dim i As Long 'Dim R As Range Dim A Dim n As Long Sheets("Hoja5").Activate Range("C12") = Now n = Range("D6") Set A = Range("F1:F" & n) Columns("F:F").ClearContents 'Generamos la matriz A For i = 1 To Range("D6") Calculate A(i, 1) = Range("D4") Next i Range("C13") = Now End Sub
Hoja 6
Código:
Sub Listado6() Dim i As Long Dim R As Range Dim A Dim n As Long Sheets("Hoja6").Activate Range("C12") = Now n = Range("D6") Set R = Range("F1:F" & n) A = R Columns("F:F").ClearContents Randomize For i = 1 To Range("D6") A(i, 1) = Rnd Next i Range("F1:F" & n) = A Range("C13") = Now End Sub
Hoja 7
Código:
Sub Listado7() Dim i As Long Dim A Dim n As Long Sheets("Hoja7").Activate Range("C12") = Now n = Range("D6") Set A = Range("F1:F" & n) Columns("F:F").ClearContents Randomize For i = 1 To Range("D6") A(i, 1) = Rnd Next i Range("C13") = Now End Sub
No hay comentarios:
Publicar un comentario