Hola; estoy programando en visual basic una macro para excel, en este bucle,que tiene otros bucles anidados, el problema es el tiempo que tarda en calcularlo(varios dias).
El cometido del bucle es comparar el contenido de la matriz bidimensional "mimatriz(1600000,5)" con el contenido de una columna de una hoja de excel que tiene 80000 elementos, buscando determinadas coincidencias que en caso de encontrarlas las almacenaría en "copmimatriz".
Alguien sabe si hay alguna manera de hacer este tipo de comparaciones sin usar bucles, de manera que sea más rapido?,
gracias y un saludo
For AA = 1 To 1600000
TT = 0
For A = 0 To 79996
T = 0
For C = 1 To 5
For B = A + 1 To 4 + A
If MIMATRIZ(AA, C) = Cells(B, 6).Value Then
T = T + 1
GoTo 5850
End If
Next B
5850 Next C
If T = 4 Then
TT = TT + 1
End If
Next A
If TT > 0 Then
GoTo 5900
End If
AB = AB + 1
For BB = 1 To 5
COPMIMATRIZ(AB, BB) = MIMATRIZ(AA, BB)
Next BB
5900 Next AA
HOLA!!!
1, indenta tu codigo
2, utiliza geshi
3, sin bucles no se puede pero...
4, podes utilizar funciones de exel integradas para lograr mejor rendimiento, por ejemplo buscar o sumar.si , yo recomiendo sumar.si, es mas rapida, solo agrega una columna con unos cerca de tu base de comparacion y si da mas de uno hay coincidencia
5, Me tome el trabajo de optimizar tu codigo al maximo que vi posible sin quitarle la esencia:
Dim TT As Boolean
For AA = 1 To 1600000
For A = 0 To 79996
T = 0
For C = 1 To 5
For B = A + 1 To A + 4
If MIMATRIZ(AA, C) = CELLS(B, 6).Value Then
T = T + 1
Exit For
End If
Next B
Next C
If T = 4 Then
TT = True
Exit For
End If
Next A
If TT Then
TT = False
Else
AB = AB + 1
For BB = 1 To 5
COPMIMATRIZ(AB, BB) = MIMATRIZ(AA, BB)
Next BB
End If
Next AA
6, Probalo y me decis cuanto tiempo te ahorre con el nuevo procedimiento.
GRACIAS POR LEER!!!