Me agrada tu proyecto.
Me comi la cabeza y llegue a este resultado que reduce 10 o mas veces el tiempo de tu funcion.
Código
Private Sub Form_Load() Dim RUT(99999) As String Dim MONTO(99999) As Integer Dim INICIO(99999) As String Dim MEDIO(99999) As String Dim a As String Open App.Path & "\ARCHIVO_BASE.TXT" For Input As #1 Do Until EOF(1) Line Input #1, a Y = Y + 1 FLAG = True For X = 1 To Y If Mid$(a, 58, 9) = RUT(X) Then FLAG = False MONTO(X) = MONTO(X) + Mid$(a, 35, 8) End If Next If FLAG = True Then RUT(Y) = Mid$(a, 58, 9) MONTO(Y) = Mid$(a, 35, 8) INICIO(Y) = Mid$(a, 1, 34) MEDIO(Y) = Mid$(a, 43, 15) Else Y = Y - 1 End If Loop ' #############################BORRO ARCHIVO_FINAL.TXT#################### Open App.Path & "\ARCHIVO_FINAL.TXT" For Output As #2 Close #2 ' #############################BORRO ARCHIVO_FINAL.TXT#################### Open App.Path & "\ARCHIVO_FINAL.TXT" For Append As #2 Dim MONTOB As String 'PARA ESCRIBIR CON LOS CEROS For X = 1 To ubound(RUT) If RUT(X) = "" And MONTO(X) = 0 Then Exit For MONTOB = Right("00000000" & MONTO(X), 8) Print #2, INICIO(X) & MONTOB & MEDIO(X) & RUT(X) Next X Close #2 Close #1 End Sub
Supuse que archivo RUTS.txt no es necesario.
Pero si lo queres, agrega este codigo entre el Close #2 y el Close #1 del final
Código
' #############################BORRO RUTS.TXT#################### Open App.Path & "\RUTS.TXT" For Output As #2 Close #2 ' #############################BORRO RUTS.TXT#################### Open App.Path & "\RUTS.TXT" For Append As #2 For X = 1 To ubound(RUT) If RUT(X) = "" Then Exit For Print #2, RUT(X) Next X Close #2
Espero que te sirva mucho. Igual mi codigo se puede optimizar 80 mil veces mas. pero para eso estan los Cracks de este foro. Yo hago lo que puedo por ayudar.
Pero estoy seguro que tiene que tardar mucho menos asi.
P.D: Modifica el largo de los vectores a tu gusto pero ojo que hay un par de for que usan ese largo escrito, lo vas a tener que cambiar a mano.
GRACIAS POR LEER!!!