Condividi:        

Allineare celle con dati uguali in excel 2013

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

Allineare celle con dati uguali in excel 2013

Postdi nagato » 24/04/15 16:15

Salve a tutti, non riesco a trovare (anche negli altri post) una soluzione efficace a qeusto problema:

ho quattro colonne con i seguenti dati

Immagine

ho necessità di far comparire nella colonna B (che rimane inizialmente vuota) i valori corrispondenti della colonna D dei colori in modo da avere poi le voci ordinate con il loro colore corretto nella colonna AeB.
Il problema è che le righe sono tante (circa 20.000) e le macro che ho trovato in giro per la rete si bloccano, funzionano solo con un certo numero di righe.
Qualcuno può aiutarmi?
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Sponsor
 

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 24/04/15 16:33

Ciao,
allega il codice con il quale hai fatto le prove.

Comunque se NON hai molte colonne e righe con formule potresti provare con la funzione "CERCA.VERT"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare celle con dati uguali in excel 2013

Postdi nagato » 24/04/15 16:40

Questo e' l'ultimo provato (non mio sia chiaro), che funzionava benissimo, ma era su più colonne, riservava le colonne B-C-D per i risultati, confrontando le colonne A e E.
Andava anche benissimo per qualche decina di righe, solo che oltre un certo numero di righe non ce la fà e si blocca excel.

Codice: Seleziona tutto
Public Sub allinea()

    Dim sh As Worksheet
    Dim lRigaA As Long
    Dim lRigaE As Long
    Dim lngA As Long
    Dim lngE As Long

    Set sh = ThisWorkbook.Worksheets("mese")

    With sh
        lRigaA = .Range("A" & .Rows.Count).End(xlUp).Row
        lRigaE = .Range("E" & .Rows.Count).End(xlUp).Row
        For lngE = 1 To lRigaE
            For lngA = 1 To lRigaA
                If Left(.Range("E" & lngE).Value, 13) = _
                    Left(.Range("A" & lngA).Value, 13) Then
                    .Range("B" & lngA).Value = .Range("E" & lngE).Value
                    .Range("C" & lngA).Value = .Range("F" & lngE).Value
                    .Range("D" & lngA).Value = .Range("G" & lngE).Value
                    Exit For
                End If
            Next
        Next
    End With
   
    Set sh = Nothing

End Sub
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 24/04/15 16:42

Ciao,
lo guardo e ... ci risentiamo.

In attesa prova con la funzione "CERCA.VERT"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare celle con dati uguali in excel 2013

Postdi nagato » 24/04/15 16:54

Grazie
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 24/04/15 17:04

Ciao,
prova questa variante che con 30.000 righe ha impiegato sul mio Pc (di media potenza) 12 secondi: per me sono troppi e si può migliorare lavorando con le "ARRAY" ma prima vediamo i tuoi tempi.

Codice: Seleziona tutto
Public Sub allinea_1()
    Dim SH As Worksheet, lRigaA As Long, lRigaC As Long, lngA As Long, lngC As Long, Inizio As Double

    Inizio = Timer
    Set SH = ThisWorkbook.Worksheets("mese")
    With SH
        lRigaA = .Range("A" & .Rows.Count).End(xlUp).Row
        .Range("B2:B" & lRigaA).ClearContents
        lRigaC = .Range("C" & .Rows.Count).End(xlUp).Row
        For lngC = 2 To lRigaC
            For lngA = 2 To lRigaA
                If Left(.Range("C" & lngC).Value, 13) = Left(.Range("A" & lngA).Value, 13) Then
                    .Range("B" & lngA).Value = .Range("D" & lngC).Value
                    Exit For
                End If
            Next
        Next
    End With
    Set SH = Nothing
    MsgBox "Elaborazione effettuata in  '" & Format(Timer - Inizio, "0.000") & "'  secondi"
End Sub


ATTENZIONE: Il codice che ho modificato utilizza le colonne del TUO ESEMPIO e parte dalla riga "2"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 24/04/15 18:15

Ciao,
dopo la versione "BASE" dell'intervento precedente ...

tanto per gradire ecco la versione "AVANZATA" (molto più veloce: solo 0,250 sec per 30.000 righe)
Codice: Seleziona tutto
Option Compare Text
Option Base 1
Option Explicit

Public Sub Allinea_2()
    Dim SH As Worksheet, lRigaA As Long, lRigaC As Long, lngA As Long, lngC As Long, Inizio As Double
    Dim Matr1, Matr2
   
    Inizio = Timer
    Set SH = ThisWorkbook.Worksheets("mese")
    With SH
        lRigaA = .Range("A" & .Rows.Count).End(xlUp).Row
        .Range("B2:B" & lRigaA).ClearContents
        lRigaC = .Range("C" & .Rows.Count).End(xlUp).Row
        Matr1 = .Range("A2:B" & lRigaA)
        Matr2 = .Range("C2:D" & lRigaC)
       
        For lngC = 1 To lRigaC - 1
            For lngA = 1 To lRigaA - 1
                If Matr2(lngC, 1) = Matr1(lngA, 1) Then
                    Matr1(lngA, 2) = Matr2(lngC, 2)
                    Exit For
                End If
            Next
        Next
        .Range("A2:B" & lRigaA) = Matr1
    End With
       
    Set SH = Nothing
    MsgBox "Elaborazione effettuata in  '" & Format(Timer - Inizio, "0.000") & "'  secondi"
End Sub


Provala e ... sono QUI
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare celle con dati uguali in excel 2013

Postdi nagato » 24/04/15 21:38

L'ho provata su qualche riga e va che è una meraviglia, il grosso pero' ce l'ho in ufficio.
Sono impaziente di provarla lunedi', quando torno al lavoro.
Posso solo dirti un immenso grazie per la tua disponibilità e competenza!
Sei un grande!
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 24/04/15 23:37

Ciao,
troppi complimenti mi ... confondono.

Aspettiamo lunedì per sapere che tempi di elaborazione ottieni con i tuoi dati reali.

Buon 25 APRILE
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare celle con dati uguali in excel 2013

Postdi nagato » 27/04/15 21:10

Allora, con i dati reali ho ottenuto 77 secondi (excel non rispondeva ma perchè stava lavorando) per 17000 righe.
Sono dei codici seriali a 12 cifre, forse per questo ci mette di piu'?
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 28/04/15 01:06

Ciao,
il tempo di 77 sec. l'hai ottenuto con la versione che utilizza le matrici?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Allineare celle con dati uguali in excel 2013

Postdi Anthony47 » 28/04/15 01:32

Penso che sia cruciale la lunghezza dell' elenco in col C:D.
Questa versione potrebbe essere leggermente piu' veloce, perche' sfrutta anche un Dictionary:
Codice: Seleziona tutto
Sub allinea3()
Dim ArrA, ArrB(), ArrCD, I As Long, aaa, LastA As Long, LastC As Long, myTim As Single
Dim myD   'my Dictionary
myTim = Timer
Set myD = CreateObject("Scripting.Dictionary") 'Modalita' Late Binding
myD.RemoveAll   ' Clear del dictionary
LastA = Cells(Rows.Count, 1).End(xlUp).Row
LastC = Cells(Rows.Count, 3).End(xlUp).Row
'
ArrA = Range("A2").Resize(LastA - 1, 1).Value
ArrCD = Range("C2").Resize(LastC - 1, 2).Value
ReDim ArrB(LBound(ArrA, 1) To UBound(ArrA, 1))
Range("B2").Resize(LastA - 1, 1).ClearContents
'
For I = LBound(ArrCD, 1) To UBound(ArrCD, 1)
    myD.Add ArrCD(I, 1), ArrCD(I, 2)
Next I
'
For I = LBound(ArrA, 1) To UBound(ArrA, 1)
    ArrB(I) = myD(ArrA(I, 1))
Next I
Range("B2").Resize(LastA - 1, 1).Value = Application.WorksheetFunction.Transpose(ArrB)
MsgBox ("Completato in (sec): " & Format(Timer - myTim, "0.00"))
End Sub

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Allineare celle con dati uguali in excel 2013

Postdi ricky53 » 28/04/15 10:56

Ciao,
ottima la soluzione di ANTHONY !!!
COMPLIMENTI.

Con 100 righe in colonna "A" e 30.000 nell'intervallo "C-D"
il tempo impiegato con il codice di Anthony è di 0,22 sec.
con la mia versione siamo a 1,62 sec.
E' un tempo alto confrontato con quello di Anthony; il mio è più lento di oltre "7" volte.

La lentezza aumenta esponenzialmente all'aumentare delle righe in colonna "A"!

Infatti con 1.000 righe in colonna "A" e 30.000 nell'intervallo "C-D"
il tempo impiegato con il codice di Anthony è di 0,24 sec.
con la mia versione siamo a 15,53 sec.
Qui è più lento di oltre "64" volte.



UTILIZZA ASSOLUTAMENTE LA VERSIONE DI ANTHONY !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "Allineare celle con dati uguali in excel 2013":


Chi c’è in linea

Visitano il forum: Nessuno e 83 ospiti

cron