elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Alternativa a bucles for…next en Visual Basic
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alternativa a bucles for…next en Visual Basic  (Leído 3,081 veces)
Superbig

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Alternativa a bucles for…next en Visual Basic
« en: 15 Julio 2015, 12:18 pm »

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


En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Alternativa a bucles for…next en Visual Basic
« Respuesta #1 en: 15 Julio 2015, 14:22 pm »

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:
Código
  1. Dim TT As Boolean
  2.    For AA = 1 To 1600000
  3.        For A = 0 To 79996
  4.            T = 0
  5.            For C = 1 To 5
  6.                For B = A + 1 To A + 4
  7.                    If MIMATRIZ(AA, C) = CELLS(B, 6).Value Then
  8.                        T = T + 1
  9.                        Exit For
  10.                    End If
  11.                Next B
  12.            Next C
  13.            If T = 4 Then
  14.                TT = True
  15.                Exit For
  16.            End If
  17.        Next A
  18.        If TT Then
  19.            TT = False
  20.        Else
  21.            AB = AB + 1
  22.            For BB = 1 To 5
  23.                COPMIMATRIZ(AB, BB) = MIMATRIZ(AA, BB)
  24.            Next BB
  25.        End If
  26.    Next AA
6, Probalo y me decis cuanto tiempo te ahorre con el nuevo procedimiento.

GRACIAS POR LEER!!!


En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines