Condividi:        

Posizioni precedentemente occupate

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 18:15

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
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1287
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Sponsor
 

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 18:37

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)


Scusatemi, esattamente dove inserisco questi codici che velocizzano la ricerca? Grazie.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 896
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Statix » 11/06/11 18:40

Ciao Lucio,eccoti la macro già inseriti
Codice: Seleziona tutto
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
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1287
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 18:54

Grazie Pietro e grazie Avatar per tutte le spiegazioni, anche se a me creano non pochi problemi.
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 896
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 19:12

Per Luigi
spero di poter essere chiaro in questa maniera (inserirò un commento ad ogni riga)
Codice: Seleziona tutto
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


Se inserisci tutta questa macro nel Vba di excel avrai i commenti in verde e sono più leggibili
spero di esserti stato di aituo
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Posizioni precedentemente occupate

Postdi Lucio Peruggini » 11/06/11 20:15

Altrochè, fin troppo gentile.
Grazie Avatar
Lucio P.
Versione Office - 2013
Lucio Peruggini
Utente Senior
 
Post: 896
Iscritto il: 24/01/11 16:23

Re: Posizioni precedentemente occupate

Postdi Avatar3 » 11/06/11 23:17

:)
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Posizioni precedentemente occupate":


Chi c’è in linea

Visitano il forum: Nessuno e 97 ospiti