Hola a todos!
Tengo dos hojas de excel, del mismo libro, "Fondos" y "Lista original".
La hoja "Fondos" contiene, entre otros, los campos que me interesan,
que son "FondoID", "Precio" y "Fecha", y tiene en total alrededor de
24000 entradas.
La hoja "Lista original" contiene, tambien entre otros, los campos
"FondoID" y "Status",que puede ser Activo o Cerrado y tiene algunas
entradas menos, alrededor de 1600.
El problema que tengo que resolver en este punto es el siguiente: he de
comprobar que todos los valores de "FondoID" con "Status" Activo de la
hoja "Lista original" se encuentran al menos una vez en "FondoID" de la
hoja "Fondos". Si se repiten o no, me da igual, aunque de hecho lo
normal sera que se repitan, pero lo importante para mi es averiguar si
estan todos al menos una vez y, si encuentro algun "habitante" de la
hoja "Lista original" que no aparezca en "Fondos", lanzar un mensaje de
error o dejar constancia en un fichero de texto (pero esto ultimo no es
problema). El problema es que mi rutina tarda muchisimo, ha estado
corriendo durante 36 minutos y solo ha llegado hasta la entrada 106 de
la hoja "Lista original", es decir, ha cubierto mas o menos la decima
parte del proceso, y yo necesito que todo esto se realice en un periodo
de tiempo asequible, unos cuantos minutos, diez a lo sumo, porque esta
comprobacion se debera realizar cada dia tras la llegada de datos
nuevos...
Adjunto la rutina que uso, por si sirve de punto de partida, o alguien
encuentra algun error de principiante...
Suponiendo que "FondoID"=ColumnaA
"Fecha"=ColumnaB
"Precio"=ColumnaC todos estos en la
hoja "Fondos"
y en la hoja "Lista original" "FondoID"=ColumnaA
"Status"=ColumnaB
'###################################################################
For i = 11 To 1600
fondo = Sheets("Lista original").Cells(i, 1).Value
If Sheets("Lista original").Cells(i, 2).Value = "ACTIVE" Then
j = 1
Do While j <= 24000
If Sheets("Fondos").Cells(j, 1).Value = fondo Then
GoTo a
ElseIf Sheets("Fondos").Cells(j, 1).Value <> fund Then
flag=0
End If
j = j + 1
Loop
If flag=0 Then
MsgBox("Fondo " & fondo & " no encontrado")
ElseIf Sheets("Lista original").Cells(i, 2).Value = "CLOSED" Then
End If
a: Next i
'############################################################
Se le ocurre a alguien otro metodo que no implique estos dos "super
bucles"?
Muchas gracias!
Carmen
Leer las respuestas