Public Function getUniqueArray(inputRange As Range, _
Optional skipBlanks As Boolean = True, _
Optional matchCase As Boolean = True, _
Optional prepPrint As Boolean = True _
) As Variant
Dim vDic As Object
Dim tArea As Range
Dim tArr As Variant, tVal As Variant, tmp As Variant
Dim noBlanks As Boolean
Dim cnt As Long
On Error GoTo exitFunc:
If inputRange Is Nothing Then GoTo exitFunc
With inputRange
If .Cells.Count < 2 Then
ReDim tArr(1 To 1, 1 To 1)
tArr(1, 1) = .Value2
getUniqueArray = tArr
GoTo exitFunc
End If
Set vDic = CreateObject("scripting.dictionary")
If Not matchCase Then vDic.compareMode = vbTextCompare
noBlanks = True
For Each tArea In .Areas
tArr = tArea.Value2
For Each tVal In tArr
If tVal <> vbNullString Then
vDic.Item(tVal) = Empty
ElseIf noBlanks Then
noBlanks = False
End If
Next
Next
End With
If Not skipBlanks Then If Not noBlanks Then vDic.Item(vbNullString) = Empty
'this is done just in the case of large data sets where the limits of
'transpose may be encountered
If prepPrint Then
ReDim tmp(1 To vDic.Count, 1 To 1)
For Each tVal In vDic.Keys
cnt = cnt + 1
tmp(cnt, 1) = tVal
Next
getUniqueArray = tmp
Else
getUniqueArray = vDic.Keys
End If
exitFunc:
Set vDic = Nothing
End Function