| | Post: 247 | Registrato il: 08/01/2012
| Città: MILANO | Età: 56 | Utente Junior | excel 2000/2007 | | OFFLINE | |
|
29/10/2016 13:08 | |
Ciao a tutti.
Un aiuto per una macro che elimini i valori duplicati di 1 colonna.
Nel file di esempio i valori della colonna D3:D40000 devono essere incollati nella colonna H3:H40000 univoci.
La mcro deve essere veloce perche i dati nella colonna sono più di 30000 righe.
Deve funzionare su excel 2003/2006.
Un grazie in anticipo.
patrik [Modificato da patrik01 29/10/2016 13:13] ------------------
excel 2003 / 20007 |
|
| | Post: 2.364 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
29/10/2016 15:15 | |
Ciao Patrick
Scusa ma perchè richiedi una macro quando puoi selezionare l''intervallo e poi dal menù Dati scegli Rimuovi Duplicati?
Al limite mentre lo fai registri la macro.
O c'è qualcosa che mi sfugge?
Alfredo |
| | Post: 396 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
29/10/2016 15:32 | |
Se proprio hai bisogno di copiare i dati univoci in un'altra colonna puoi utilizzare una macro così:
Option Explicit
Sub Copia_No_Duplicati()
Dim ur As Long
ur = Range("D" & Rows.Count).End(xlUp).Row
Range("D3:D" & ur).Copy Destination:=Range("H3")
Range("H3:H" & ur).RemoveDuplicates Columns:=1, Header:=xlNo
End Sub
Opps, ciao alfrimpa, come sempre non mi preoccupo mai di fare un refresh prima di postare
PS. solo ora mi rendo conto che la macro non potrà funzionare con Excel 2K3 dato che non implementava il "RemoveDuplicates". [Modificato da rollis13 29/10/2016 16:08]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 2.365 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
29/10/2016 15:40 | |
Ciao Rolando nessun problema
Alfredo |
| | Post: 397 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
29/10/2016 17:08 | |
Con Excel 2K3 potrebbe andar bene questa: Sub Copia_No_Duplicati_3()
Dim ur As Long 'ultima riga utile
Dim x As Long 'contatore generico
ur = Range("D" & Rows.Count).End(xlUp).Row
Range("D3:D" & ur).Copy Destination:=Range("H3")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For x = ur To 3 Step -1 'retrocedi fino alla riga 3
If Application.WorksheetFunction.CountIf(Range("H3:H" & x), Range("H" & x)) > 1 Then Range("H" & x).Delete
Next x
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
ma se i dati sono proprio tanti forse torna utile gestire l'elaborazione in una matrice.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 247 | Registrato il: 08/01/2012
| Città: MILANO | Età: 56 | Utente Junior | excel 2000/2007 | | OFFLINE | |
|
29/10/2016 17:58 | |
Grazie a tutti.
Una modifica:
se i dati da "univocare" devono essere incollati da foglio1 a foglio2
con 2 colonne?ù
Nell'esempio postato:
Incollare nelle colonne A/B del foglio2 i dati del foglio1 della colonna D/M univoci.
patrik ------------------
excel 2003 / 20007 |
| | Post: 248 | Registrato il: 08/01/2012
| Città: MILANO | Età: 56 | Utente Junior | excel 2000/2007 | | OFFLINE | |
|
29/10/2016 21:48 | |
Ciao,
non riesco a modificare la macro di rollis perchè funzioni in 2 fogli.
Posto l'esempio.
patrik [Modificato da patrik01 29/10/2016 21:50] ------------------
excel 2003 / 20007 |
| | Post: 398 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
29/10/2016 22:46 | |
Data la mole di dati da elaborare/confrontare forse è il caso di usare una gestione con matrice altrimenti i tempi potrebbero risultare smisurati.
In ogni caso, che rapporto c'è tra i dati delle due colonne D e M ? sono legati tra loro o si tratta di riportare nel Foglio2 i dati univoci delle singole colonne rispettivamente in A e B ?
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 249 | Registrato il: 08/01/2012
| Città: MILANO | Età: 56 | Utente Junior | excel 2000/2007 | | OFFLINE | |
|
29/10/2016 23:09 | |
Ciao rollis,
bisogna riportare i dati delle colonne D/M del foglio "pannelli" nelle colonne A/B del foglio2 univoci.
Nella colonna C del foglio2 c'è una formula che dovrebbe riportare la
quantità dei valori ripeuti. Alla fine devo inserire una macro che
ordina descrescente i valori della colonna C.
spero di essermi spiegato.
patrik ------------------
excel 2003 / 20007 |
| | Post: 399 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
30/10/2016 00:13 | |
Non hai chiarito se c'è un legame tra i di dati nel foglio "pannelli" colonna D e M e pertanto li considero svincolati uno dall'altro.
Puoi usare questa macro: Option Explicit
Sub Copia_No_Duplicati()
Dim ur As Long 'ultima riga utile
Dim cella As Range 'cella elaborata
Dim a() 'matrice
Dim n As Long 'contatore per matrice
'elabora colonna D
ur = Sheets("pannelli").Range("D" & Rows.Count).End(xlUp).Row
ReDim a(1 To ur - 1, 1 To 1)
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For Each cella In Sheets("pannelli").Range("D3:D" & ur)
If Not .Exists(cella.Value) Then
n = n + 1
a(n, 1) = cella.Value
.Item(cella.Value) = Empty
End If
Next
End With
Sheets("Foglio2").Range("A3:A" & ur).Value = a
'elabora colonna M
ur = Sheets("pannelli").Range("M" & Rows.Count).End(xlUp).Row
n = 0
ReDim a(1 To ur - 1, 1 To 1)
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For Each cella In Sheets("pannelli").Range("M3:M" & ur)
If Not .Exists(cella.Value) Then
n = n + 1
a(n, 1) = cella.Value
.Item(cella.Value) = Empty
End If
Next
End With
Sheets("Foglio2").Range("B3:B" & ur).Value = a
End Sub
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 250 | Registrato il: 08/01/2012
| Città: MILANO | Età: 56 | Utente Junior | excel 2000/2007 | | OFFLINE | |
|
30/10/2016 08:47 | |
Ciao rollis,
infatti non ti ho specificato che le colonne D/M sono vincolate e il risultato finale non è esatto .
patrik ------------------
excel 2003 / 20007 |
| | Post: 907 | Registrato il: 06/04/2013
| Utente Senior | 2010 | | OFFLINE |
|
30/10/2016 10:19 | |
patrik01, 29/10/2016 23.09:
Ciao rollis,
bisogna riportare i dati delle colonne D/M del foglio "pannelli" nelle colonne A/B del foglio2 univoci.
Nella colonna C del foglio2 c'è una formula che dovrebbe riportare la
quantità dei valori ripeuti. Alla fine devo inserire una macro che
ordina descrescente i valori della colonna C.
spero di essermi spiegato.
patrik
Ciao
personalmente non trovo chiaro quanto detto relativamente alla colonna C. Una volta copiati in A/B i dati "univoci", la tua formula prende in considerazione solo i valori di A(foglio2) corrispondenti a D (Pannelli), pertanto il vincolo D-M non viene rispettato ??
Chiarito questo, la macro potrebbe farsi anche carico di tale dato evitando l'inserimento di formule.
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 251 | Registrato il: 08/01/2012
| Città: MILANO | Età: 56 | Utente Junior | excel 2000/2007 | | OFFLINE | |
|
30/10/2016 10:39 | |
Ciao domenico.
La formula nella colonna C del foglio2:
=SE(A3="";"";SOMMA.SE(pannelli!$D$3:D$40000;A3;pannelli!$N$3:$N$40000))
se è esatta somma la quantità dei valori della colonna N del foglio pannelli riferita alla colonna A del foglio2.
patrik ------------------
excel 2003 / 20007 |
| | Post: 908 | Registrato il: 06/04/2013
| Utente Senior | 2010 | | OFFLINE |
|
30/10/2016 11:52 | |
Ciao (la mia è solo curiosità...sei in ottime mani)
quindi non considera il vincolo D-M (era questa la domanda), in quanto sommerà per esempio i valori di "N" di tutti gli "1" a prescindere che siano 1-A oppure 1-U ecc ecc
saluti Domenico
Win 10 - Excel 2016 |
|
|