Riprovato mi ero dimenticato di mettere
Application.ScreenUpdating = False
Application.ScreenUpdating = True
adesso si sono invertiti i tempi
6,53 la prima macro
6,40 la seconda
Moderatori: Anthony47, Flash30005
Avatar3 ha scritto:Hai fatto bene ad inserire quel codice (nei miei test non lo inserisco poi a volte mi dimentico di metterlo nel progetto finale)
c'è anche ScreenUpdate false e true
- Codice: Seleziona tutto
Application.ScreenUpdating = False
Application.Calculation = xlManual
'...
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Molto strano che con il vettore sia più veloce perché in effetti è solo utilizzato come variabile
Ma se hai fatto prove con molte righe e ti risulta così, ci sarà sicuramente un motivo
Se vuoi avere i tempi effettivi
inserisci all'inizio della macro
Start = timer
...
...
e alla fine
Msgbox Timer -Start (avrai la differenza effettiva in secondi)
Sub CopilaTab3()
Start = Timer
UR = Range("C" & Rows.Count).End(xlUp).Row
Range("L4:P" & UR).ClearContents
Application.ScreenUpdating = False
Application.Calculation = xlManual
Dim VN As Integer '<<<< variabile
Dim VN1 As Integer '<<<<< variabile1
For RR = UR To 4 Step -1
For CC = 3 To 7
VN = Cells(RR, CC).Value
For RR1 = RR - 1 To 3 Step -1
For CC1 = 3 To 7
VN1 = Cells(RR1, CC1).Value
If VN = VN1 Then
Cells(RR, CC + 9).Value = CC1 - 2
GoTo saltaRR
Else
If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2
End If
Next CC1
Next RR1
saltaRR:
Next CC
Next RR
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
MsgBox Timer - Start
End Sub
Sub CopilaTab3()
Start = Timer ' Start prende il valore della funzione Timer del Pc in secondi dalla mezzanotte
UR = Range("C" & Rows.Count).End(xlUp).Row ' conta le righe della colonna C
Range("L4:P" & UR).ClearContents ' Cancella tutti i dati nella tabella per ricompilarla (dalla cella L4 a P n righe piene)
Application.ScreenUpdating = False ' ferma l'aggiornamento del/i fogli (non si vede nessun aggiornamento fino alla fine)
Application.Calculation = xlManual 'ferma il calcolo velocizzando la macro
Dim VN As Integer '<<<< variabile
Dim VN1 As Integer '<<<<< variabile1
For RR = UR To 4 Step -1 'ciclo di scansione riga per riga partendo dall'ultima riga per fermarsi alla riga 4
For CC = 3 To 7 ' ciclo che scansiona le colonne dalla "C" alla colonna "G" (da 3 a 7)
VN = Cells(RR, CC).Value 'VN assume il valore contenuto nella cella Riga RR e colonna CC
For RR1 = RR - 1 To 3 Step -1 'Seconda scansione per confronto dalla riga RR-1 (se RR = 1000, RR1 sarà 999 fino alla riga 3
For CC1 = 3 To 7 'stesso discorso dalla colonna "C" all "G" (dove ci sono i numeri estratti
VN1 = Cells(RR1, CC1).Value 'VN1 è la seconda variabile che assume il valore di cella riga RR1 e colonna CC1
If VN = VN1 Then 'confronta il primo valore con il secondo se identico
Cells(RR, CC + 9).Value = CC1 - 2 ' inserisce nella colonna distante 9 colonne a destra dalla colonna CC il numero di colonna CC1-2 (perché CC1 minimo è 3 ma in quel caso la posizione è 1 quindi la posizione sarà sempre CC1-2)
GoTo saltaRR 'e salta alla colonna successiva di CC
Else 'altrimenti
If Cells(RR, CC + 9).Value = "" Then Cells(RR, CC + 9).Value = CC - 2 metterà nella tabella la posizione della colonna CC-2
End If
Next CC1 ' da qui in poi si chiudono i cilci for... next aperti precedentemente
Next RR1
saltaRR:
Next CC
Next RR
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
MsgBox Timer - Start
End Sub
Torna a Applicazioni Office Windows
Copiare dati tra fogli ma in posizioni diverse Autore: BG66 |
Forum: Applicazioni Office Windows Risposte: 3 |
Come creare un elenco con le posizioni dei dati trovati Autore: M@rtyn@ |
Forum: Applicazioni Office Windows Risposte: 7 |
Numero in cella diviso per numero celle occupate - excel OOO Autore: apprendistaIT |
Forum: Applicazioni Office Windows Risposte: 2 |
Visitano il forum: Nessuno e 82 ospiti