Ho scritto una macro, che cerca un numero in diverse colonne contemporaneamente, ma è relativamente “veloce” o accettabile se le righe sono meno di 100 mila. Purtroppo a me serve che legga fino a milione di righe e oltre. Per adesso mi limito a poco meno di 1 milione e man mano che le estrazioni aumentano(si parla di 2.555.190 quartine del Lotto) vedrò sul da farsi eventualmente aprirò un nuovo post di aiuto al Forum. Allego la macro che cerca contemporaneamente nelle colonne C:F(end) e trovato il numero riporta i numeri della stessa riga ,compreso il valore che è sulla colonna G, accodandoli in colonna X partendo da X2. Quindi cerco nel range C3:F(end) il numero riportato in P3 e quando
lo trovo riporto la quartina accodandola partendo da X2. Aggiungo che il numero da cercare non deve essere riportato in colonna X. Faccio un esempio... il numero in P3 è 33 quindi cerco nel range C3:F(end) il numero 33 e trovo la prima quartina 81 54 33 55 con valore (in blu) 5 quindi riporto in colonna X solo i numeri 81 54 55 5. La seconda quartina che si trova è 46 76 33 20 con valore 5 quindi è da accodare in colonna X solo i numeri 46 76 20 5. Penso che leggendo la macro si capisca cosa cerco tuttavia è meglio dare qualche descrizione con esempio in più per non far perdere tempo a chi eventualmente mi vuole aiutare. Se la mia macro non si riesce modificare per renderla veloce e se ne propone un’altra con le stesse caratteristiche sarà molto gradita. Allego anche un file per eventuale prove.
Ringraziando anticipatamente tutti colore che mi aiuteranno. 73 ikwae
- Codice: Seleziona tutto
Sub Cerca_Numero_In_4Col()
Dim CL As Range, zona As Range
Dim T As Single
Dim r As Integer
Application.ScreenUpdating = False
T = Timer
Set zona = Sheets("Sviluppo").Range("C3", "F3:F" & [F3].End(xlDown).Row) '
For Each CL In zona
If CL.Value = Range("P3").Value Then 'il valore di P3
CL.Select
If ActiveCell = Cells(ActiveCell.Row, 3) Then GoTo 10 'col C
If ActiveCell = Cells(ActiveCell.Row, 4) Then GoTo 20 'col D
If ActiveCell = Cells(ActiveCell.Row, 5) Then GoTo 30 'col E
If ActiveCell = Cells(ActiveCell.Row, 6) Then GoTo 40 'col F
'
Else: GoTo 50
10 '--COLONNA--C--
r = Sheets("Sviluppo").Cells(Rows.Count, 24).End(xlUp).Row + 1
ActiveCell.Range("B1:E1").Copy Sheets("Sviluppo").Cells(r, 24)
GoTo 50
20 '--COLONNA--D--
r = Sheets("Sviluppo").Cells(Rows.Count, 24).End(xlUp).Row + 1
ActiveCell.Offset(0, -1).Range("A1, C1:E1").Copy Sheets("Sviluppo").Cells(r, 24)
GoTo 50
30 '--COLONNA--E--
r = Sheets("Sviluppo").Cells(Rows.Count, 24).End(xlUp).Row + 1
ActiveCell.Offset(0, -2).Range("A1,B1, D1:E1").Copy Sheets("Sviluppo").Cells(r, 24)
GoTo 50
40 '--COLONNA--F--
r = Sheets("Sviluppo").Cells(Rows.Count, 24).End(xlUp).Row + 1
ActiveCell.Offset(0, -3).Range("A1:C1,E1").Copy Sheets("Sviluppo").Cells(r, 24)
GoTo 50
50
End If
Next
Application.CutCopyMode = False
Range("W1").Select
Set zona = Nothing
Application.ScreenUpdating = True
MsgBox "Completato in (sec): " & Format(Timer - T, "0.00"), vbInformation
End Sub
https://www.dropbox.com/s/e8y6w83jdb3wd ... 4.zip?dl=0