Attualmente ho il codice che mi consente di esaminare le righe con ID corrispondente dal Foglio 1 e dal Foglio 2. Quando entrambi gli ID corrispondono, Foglio 2 le informazioni verranno incollate alle righe del Foglio 1 con gli stessi ID. Il mio codice funziona su meno di 1.000 righe e quando ho provato ha dato risultati entro un minuto.Esegui un ciclo per più di 100.000 righe di dati in due fogli nella stessa cartella di lavoro
Il problema è che quando ho provato a eseguirlo per 1.000.000 di righe, continua a funzionare e per più di 20 minuti e non smette mai di funzionare da allora. Spero che qualcuno possa aiutarmi a modificare il codice per consentirmi di eseguire un ciclo e copiare le informazioni dal Foglio 2 al Foglio 1 per 200.000 righe.
Sub Sample()
Dim tracker As Worksheet
Dim master As Worksheet
Dim cell As Range
Dim cellFound As Range
Dim OutPut As Long
Set tracker = Workbooks("test.xlsm").Sheets("Sheet1")
Set master = Workbooks("test.xlsm").Sheets("Sheet2")
Application.ScreenUpdating = False
For Each cell In master.Range("A2:A200000")
Set cellFound = tracker.Range("A5:A43000").Find(What:=cell.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not cellFound Is Nothing Then
matching value
cellFound.Offset(ColumnOffset:=1).Value2 = cell.Offset(ColumnOffset:=2).Value2
Else
End If
Set cellFound = Nothing
Debug.Print cell.Address
Next
Application.ScreenUpdating = True
OutPut = MsgBox("Update over!", vbOKOnly, "Update Status")
End Sub
Sopra è il codice che ho per ora.
Per i principianti, la scrittura di 200.000 indirizzi di celle nella finestra Immediata del VBE tramite 'Debug.Print cell.Address' avrà un impatto negativo sulle prestazioni. In realtà, scrivere 200.000 di * qualsiasi * * * ovunque * quando non è importante avrà un impatto negativo sulle prestazioni. – Jeeped
Carica i valori dal foglio tracker in un oggetto dizionario, con i valori come chiavi e i numeri di riga come valori. Leggi tutta la gamma A2: B200000 in una matrice variante e cicla su quella, controllando il dizionario per le corrispondenze: quando trovi una corrispondenza copia il valore dalla seconda "colonna" della matrice al foglio del tracker sulla riga che hai trovato dalla oggetto del dizionario. –
Domanda simile: http://stackoverflow.com/questions/24998958/excel-macro-to-compare-and-copy-data-from-solo-sheet-to-un'altra-prima-una-ora-dong4999397# 24999397 –