Aqui está um método que eu uso em um projeto atual.
'@ws - Worksheet object
'@col - String value
'Notes:
' - @ws should be the worksheet that contains the Range @col
' - @col should be a Column/Row based Range, should be only 1 Column or Row
Function UniqueValues(ws As Worksheet, col As String) As Variant
Dim rng As Range: Set rng = ws.Range(col)
Dim dict As New Scripting.Dictionary
If Not (rng Is Nothing) Then
Dim cell As Range, val As String
For Each cell In rng.Cells
val = CStr(cell.Value)
If InStr(1, val, ",") > 0 Then
val = Replace(val, ",", Chr(130))
End If
If Not dict.Exists(val) Then
dict.Add val, val
End If
Next cell
End If
'Return value as Variant Array
UniqueValues = dict.Items
End Function
Provavelmente, você desejará verificar o valor val > 0
, val & "" <> ""
ou IsNullOrEmpty(val)
. IsNullOrEmpty
é uma UDF que eu criei já que o VBA não contém um método String para fazer isso como um.
Eu publiquei vários snippets de código no site Microsoft Wikia . Eles são muito genéricos e podem ser usados para qualquer finalidade, como eles são especificados.