Rimuovi duplicati da un vettore (array)

A volte capita di dover estrarre da un insieme di dati di una tabella, i valori univoci di un determinato campo, magari per successive elaborazioni. Mettiamo ad esempio il campo prodotto di una tabella movimenti, o il codice utente o qualunque cosa insomma che compaia una o più volte in una determinata tabella e noi abbiamo bisogno di sapere che c’è un determinato valore ma non di vedercelo ripetuto più volte.

ho trovato online un codice ottimo e semplice da utilizzare e ve lo propongo.

Chiamiamo myarray il vettore che contiene la lista di dati non univoci, numerorecord il numero dei record in esso contenuti, OutputArray il vettore contenente i dati univoci, NOutput il numero di risultati univoci:

Public Function removeDuplicates(ByVal myarray As Variant) As Variant

Dim d As Object
Dim v As Variant 'Value for function
Dim i As Integer

Set d = CreateObject("Scripting.Dictionary")

'For i = LBound(myarray) To UBound(myarray)
For i = 0 To NumeroRecord - 1
    d(myarray(0, i)) = 1

Next i

i = 0
For Each v In d.Keys()

    ReDim Preserve OutputArray(0 To i)
    OutputArray(i) = v
    i = i + 1

Next v

removeDuplicates = OutputArray
NOutput = UBound(removeDuplicates) - LBound(removeDuplicates) + 1
End Function

Ovviamente il numero dei record dei dati grezzi (numerorecord) può essere conteggiato in più modi, (un Dlookup della tabella o la differenza tra UBound e LBound come nell’esempio precedente…) e inseriti comodamente in una variabile global in modo da consentire al valore di “entrare” nella function senza passarla come argomento della funzione.

No thoughts on “Rimuovi duplicati da un vettore (array)”