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.