Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Identificare record ripetuti

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: Identificare record ripetuti

Postdi Lucio P. » 15/04/09 23:09

[L’estensione zip è stata disattivata e non puó essere visualizzata.]




Ciao Tribuno, eccoti il file.
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Sponsor
 

Re: Identificare record ripetuti

Postdi Tribuno » 15/04/09 23:52

Ciao Lucio,

prova su un file di prova queste macro:

Codice: Seleziona tutto
Dim I As Integer, Ruote As Integer, Ur As Integer
Dim BA As Integer, CA As Integer, FI As Integer, GE As Integer, MI As Integer
Dim NA As Integer, PA As Integer, RO As Integer, TOR As Integer, VE As Integer

Sub Lucio()
Ur = Range("A65536").End(xlUp).Row
Ruote = 0
I = 2
While I <= Ur
    Select Case Cells(I, 2)
        Case "Ba"
            If BA = 1 Then
                Cancella_Doppione I, Ur
            Else
                BA = 1
                Ruote = Ruote + 1
            End If
        Case "Ca"
            If CA = 1 Then
                Cancella_Doppione I, Ur
            Else
                CA = 1
                Ruote = Ruote + 1
            End If
        Case "Fi"
            If FI = 1 Then
                Cancella_Doppione I, Ur
            Else
                FI = 1
                Ruote = Ruote + 1
            End If
        Case "Ge"
            If GE = 1 Then
                Cancella_Doppione I, Ur
            Else
                GE = 1
                Ruote = Ruote + 1
            End If
        Case "Mi"
            If MI = 1 Then
                Cancella_Doppione I, Ur
            Else
                MI = 1
                Ruote = Ruote + 1
            End If
        Case "Na"
            If NA = 1 Then
                Cancella_Doppione I, Ur
            Else
                NA = 1
                Ruote = Ruote + 1
            End If
        Case "Pa"
            If PA = 1 Then
                Cancella_Doppione I, Ur
            Else
                PA = 1
                Ruote = Ruote + 1
            End If
        Case "Ro"
            If RO = 1 Then
                Cancella_Doppione I, Ur
            Else
                RO = 1
                Ruote = Ruote + 1
            End If
        Case "To"
            If TOR = 1 Then
                Cancella_Doppione I, Ur
            Else
                TOR = 1
                Ruote = Ruote + 1
            End If
        Case "Ve"
            If VE = 1 Then
                Cancella_Doppione I, Ur
            Else
                VE = 1
                Ruote = Ruote + 1
            End If
    End Select
    If Ruote = 9 Then
        BA = 0: CA = 0: FI = 0: GE = 0: FI = 0: MI = 0: NA = 0: PA = 0: RO = 0: TOR = 0: VE = 0
        Ruote = 0
    End If
    I = I + 1
Wend
End Sub

Sub Cancella_Doppione(I, Ur)
    Rows(I).Select
    Selection.Delete Shift:=xlUp
    Ur = Ur - 1
    I = I - 1
End Sub


Ciao
Tribuno
Avatar utente
Tribuno
Utente Senior
 
Post: 181
Iscritto il: 22/08/08 19:24

Re: Identificare record ripetuti

Postdi Anthony47 » 16/04/09 00:11

Stirner ha scritto:Alcune volte ripartire da zero aiuta a capire, perlomeno a me e agli altri come meno esperti).
Non è automatico che bisogna partire da chi vuole che si parte da una propria "posizione"(spero di non venire accusato di lesa Maestà).
Tranquilli, non ci sono maesta' in questo forum. Penso pero' che chi arriva su una discussione gia' in corso, re, conte o marchese, e' opportuno che legga i messaggi gia' scritti senza ripartire da zero.

Per Lucio: hai gia' la proposta di Tribuno, provala...
Avevo lavorato sulla base della precedente descrizione, e avevo elaborato questa proposta:
-i tuoi dati sono in col A, B, C, da riga 2 in giu'
Apri l' editor delle macro con Alt-F11
-Menu /Inserisci /Modulo
-copia il seguente codice e incollalo nel frame di destra
Codice: Seleziona tutto
Function Blocco(Cella)
Blocco = Cella.Offset(-1, 1)
If (Application.WorksheetFunction.CountIf(Range(Cells(1, Cella.Column), Cells(Cella.Row - 1, Cella.Column)), "=1")) _
    Mod 9 = 0 Then Blocco = Blocco + 1
End Function
Torna su excel
-in E2 scrivi 1, in F2 scrivi 0
-in E3 metti la formula
Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO(--(A$1:A3=A3);--(B$1:B3=B3);--(F$1:F3=F3))

-in F2 metti la formula
Codice: Seleziona tutto
=blocco(E3)

-copi poi E3:F3 verso il basso per quante righe di dati hai.
La colonna E e' quella che devi filtrare; suggerisco di filtrare per valori=1, poi copi col A:C dei dati visibili e li incolli su un altro foglio.
Oppure filtri per diverso da 1 ed elimini le righe che vengono visualizzate, ma questo lo farai su una copia del file originale.
Applicando questo metodo al tuo file ho ottenuto lo stesso risultato che ottieni con la macro di Tribuno; il che dimostra almeno che abbiamo capito ambedue la stessa cosa.
Fai sapere...

Ciao a tutti.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Identificare record ripetuti

Postdi Lucio P. » 16/04/09 12:13

Ciao Anthony, ciao Tribuno
vi ringrazio immensamente per l'aiuto che mi stade dando e naturalmente ringrazio tutti coloro che sono intervenuti a tal proposito. Con le mie limitate conoscenze proverò quanto mi avete mandato e sono convinto sin dora che il tutto funzionerà alla perfezione. Un grazie particolare per le spiegazioni allegate senza delle quali non credo sarei riuscito nell'eseguirle.
Stasera vi farò sapere come è andato il tutto.
Ciao, Lucio
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi Lucio P. » 16/04/09 21:53

Ciao Anthony e Tribuno.
Come avevo anticipato, ero sicuro che il tutto sarebbe andato come ci si aspettava. I due metodi attuati funzionano alla grande. Devo ringraziare anche Statix con il quale ho da qualche tempo un ottimo rapporto collaborativo, il quale mi sta insegnado i primi passi con le macro.

Ancora grazie a tutti, Lucio
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi stirner » 18/04/09 05:55

Ciao Lucio,
con riferimento alla tua apertura e al tuo file immagine prova quanto in allegato.
Ti ringrazio anticipatamente per il riscontro.

Stirner
Allegati

[L’estensione zip è stata disattivata e non puó essere visualizzata.]

--------
Stirner
stirner
Utente Junior
 
Post: 79
Iscritto il: 14/02/09 15:13

Re: Identificare record ripetuti

Postdi Lucio P. » 18/04/09 18:24

stirner ha scritto:Ciao Lucio,
con riferimento alla tua apertura e al tuo file immagine prova quanto in allegato.
Ti ringrazio anticipatamente per il riscontro.

Stirner



Ciao Stirner, anche questo funziona benissimo però aggiungendo altri record non visualizza i risultati nelle colonne che hai aggiunto. Pur provando a modificare il numero record, non sono riuscito nell'intento. Ti allego l'exsel con i record aggiunti così puoi provarci tu.
Ringrazio anticipatamente, Lucio
Allegati

[L’estensione rar è stata disattivata e non puó essere visualizzata.]

Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi stirner » 19/04/09 00:29

La formula funziona perfettamente. Vedo semplicemente che hai sbagliato a trascrivere i riferimenti di matrice (...mai paura! Succede a molti dilettanti come me e te).
In G2 hai scritto $C$2:$C$24 invece di $C$2:$C$3000;
In H2 la stessa cosa;
In I2 hai lasciato sempre $C$2:$C$24 invece di $C$2:$C$3000.
L'unico problema nell'utilizzo di questa formula potrebbe sussistere nei tempi di ricalcolo.
Tale problema è causato dall'impiego in I2 di una formula matriciale.
I tempi di ricalcolo possono essere più o meno lunghi a seconda delle prestazioni del tuo PC.
Ti ringrazio anticipatamente per il riscontro.
Ciao

Stirner
--------
Stirner
stirner
Utente Junior
 
Post: 79
Iscritto il: 14/02/09 15:13

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 00:36

Grazie Stirner e buona Domenica
Lucio
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 12:37

Ciao Stirner, ho provato ma senza riuscirci; non mi visualizza i risultati. E' troppo disturbo chiederti di inviarmi l'exsel che ti ho dato con i record aggiunti e modificato da te?
Lucio
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi stirner » 19/04/09 16:21

Ciao Lucio, nessun disturbo.
Quando asserivo che non avevo bisogno di provare, non era un atto di presunzione ma mi riferivo naturalmente allo spezzone di file in cui le formule funzionavano perfettamente come hai potuto verificare. Poi ho visto i tuoi errori di trascrizioni e non ho testato l'intera tabella (in genere provo sempre, prima di postare).
Adesso che provato sull'intera tabella, a prima vista ho riscontrato errori nei formati e nella matriciale. dovrò comunque approfondire.Proverò a sistemare tutto mi farò risentire al più presto. Intanto prova a considerare quanto detto da chi mi ha preceduto.

Stirner
--------
Stirner
stirner
Utente Junior
 
Post: 79
Iscritto il: 14/02/09 15:13

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 18:11

Lucio P. ha scritto:Ciao Anthony e Tribuno.
Come avevo anticipato, ero sicuro che il tutto sarebbe andato come ci si aspettava. I due metodi attuati funzionano alla grande. Devo ringraziare anche Statix con il quale ho da qualche tempo un ottimo rapporto collaborativo, il quale mi sta insegnado i primi passi con le macro.

Ancora grazie a tutti, Lucio



Questa è la macro di Tribuno, chiedo:
come faccio a farla funzionare con 100.000-200.000 record sequenziali? Bisogna modificare questa riga(Ur = Range("A65536").... e a quanto dovrei impostarla? Ho provato con 100.000 ma nulla di fatto. Grazie, Lucio




Dim I As Integer, Ruote As Integer, Ur As Integer
Dim BA As Integer, CA As Integer, FI As Integer, GE As Integer, MI As Integer
Dim NA As Integer, PA As Integer, RO As Integer, TOR As Integer, VE As Integer

Sub Lucio()
Ur = Range("A65536").End(xlUp).Row
Ruote = 0
I = 2
While I <= Ur
Select Case Cells(I, 2)
Case "Ba"
If BA = 1 Then
Cancella_Doppione I, Ur
Else
BA = 1
Ruote = Ruote + 1
End If
Case "Ca"
If CA = 1 Then
Cancella_Doppione I, Ur
Else
CA = 1
Ruote = Ruote + 1
End If
Case "Fi"
If FI = 1 Then
Cancella_Doppione I, Ur
Else
FI = 1
Ruote = Ruote + 1
End If
Case "Ge"
If GE = 1 Then
Cancella_Doppione I, Ur
Else
GE = 1
Ruote = Ruote + 1
End If
Case "Mi"
If MI = 1 Then
Cancella_Doppione I, Ur
Else
MI = 1
Ruote = Ruote + 1
End If
Case "Na"
If NA = 1 Then
Cancella_Doppione I, Ur
Else
NA = 1
Ruote = Ruote + 1
End If
Case "Pa"
If PA = 1 Then
Cancella_Doppione I, Ur
Else
PA = 1
Ruote = Ruote + 1
End If
Case "Ro"
If RO = 1 Then
Cancella_Doppione I, Ur
Else
RO = 1
Ruote = Ruote + 1
End If
Case "To"
If TOR = 1 Then
Cancella_Doppione I, Ur
Else
TOR = 1
Ruote = Ruote + 1
End If
Case "Ve"
If VE = 1 Then
Cancella_Doppione I, Ur
Else
VE = 1
Ruote = Ruote + 1
End If
End Select
If Ruote = 9 Then
BA = 0: CA = 0: FI = 0: GE = 0: FI = 0: MI = 0: NA = 0: PA = 0: RO = 0: TOR = 0: VE = 0
Ruote = 0
End If
I = I + 1
Wend
End Sub

Sub Cancella_Doppione(I, Ur)
Rows(I).Select
Selection.Delete Shift:=xlUp
Ur = Ur - 1
I = I - 1
End Sub
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi ricky53 » 19/04/09 18:47

Ciao, se parli di 100.000 e più righe vuol dire che utilizzi excel 2007.
In ogni caso (versione) sostituisci:

Ur = Range("A65536").End(xlUp).Row
con
Ur= Range("A" & Rows.Count).End(xlUp).Row

Ciao da Ricky53
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 19:35

Ciao Richy, mi da errore di Run-Time '6': Overflow che penso sia legato in qualche modo al range di ricord. Si, adopero exsel 2007, grazie Lucio
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi ricky53 » 19/04/09 20:50

Ciao,

puoi inviare un file excel di esempio con la macro inserita?

Ciao da Ricky53
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 22:10

ciao Richy, tempo dieci minuti e ti invio l'exsel con i dati richiesti.
Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi Anthony47 » 19/04/09 22:22

Hai definito in testa Ur as Integer, che vuol dire max 32700 righe circa; sostituisci con Ur as Single che arriva a 3,4*10^48...

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 22:29

ricky53 ha scritto:Ciao,

puoi inviare un file excel di esempio con la macro inserita?

Ciao da Ricky53



Ecco il file
Allegati

[L’estensione rar è stata disattivata e non puó essere visualizzata.]

Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

Re: Identificare record ripetuti

Postdi ricky53 » 19/04/09 22:37

Ciao,
non avevo letto la definizione delle variabili e, leggendo quanto correttamente scritto da Anthony, il problema si risolve modificando la definizione della variabile "UR".
Comunque scarico il file.
Ciao da Ricky53
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Identificare record ripetuti

Postdi Lucio P. » 19/04/09 22:48

ricky53 ha scritto:Ciao,

puoi inviare un file excel di esempio con la macro inserita?

Ciao da Ricky53



Invio di altro zip, il precedente forse non funziona
Allegati

[L’estensione zip è stata disattivata e non puó essere visualizzata.]

Lucio P.
Utente Junior
 
Post: 82
Iscritto il: 15/04/09 08:53

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Identificare record ripetuti":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti