Might be a bit over the top, but works with multi-dimensional arrays and range selections...
<font face=Courier New><SPAN style="color:#00007F">Option</SPAN> <SPAN style="color:#00007F">Explicit</SPAN>
<SPAN style="color:#00007F">Declare</SPAN> <SPAN style="color:#00007F">Sub</SPAN> RtlMoveMemory <SPAN style="color:#00007F">Lib</SPAN> "kernel32" ( _
Destination <SPAN style="color:#00007F">As</SPAN> Any, _
Source <SPAN style="color:#00007F">As</SPAN> Any, _
<SPAN style="color:#00007F">ByVal</SPAN> Length <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>)
<SPAN style="color:#00007F">Sub</SPAN> testUL()
<SPAN style="color:#007F00">'Originally written by firefytr</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> x, y, s <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN>
<SPAN style="color:#00007F">If</SPAN> Selection.Cells.Count = 1 <SPAN style="color:#00007F">Then</SPAN>
s = Selection
<SPAN style="color:#00007F">GoTo</SPAN> OnlyOneItem
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
x = UniqueList(Selection)
<SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> y <SPAN style="color:#00007F">In</SPAN> x
s = s & y & vbNewLine
<SPAN style="color:#00007F">Next</SPAN> y
OnlyOneItem:
MsgBox s
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
<SPAN style="color:#00007F">Sub</SPAN> testUL2()
<SPAN style="color:#007F00">'Originally written by firefytr</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> x <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>, y <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>, s <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN>
x = UniqueList(Array("a", "a", "b", "b", "B", 1, 2, 3))
<SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> y <SPAN style="color:#00007F">In</SPAN> x
s = s & y & vbNewLine
<SPAN style="color:#00007F">Next</SPAN> y
MsgBox s
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
<SPAN style="color:#00007F">Function</SPAN> UniqueList(varInput <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>) <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>
<SPAN style="color:#007F00">'Originally written by firefytr</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> Dic <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Object</SPAN>, dicItem <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Object</SPAN>, blnArray <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Boolean</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> aTemp <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>, arrUnique() <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>, vItem <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> iRow <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, iCol <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, iDim() <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN>, iCnt <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>
<SPAN style="color:#00007F">Set</SPAN> Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = vbTextCompare
<SPAN style="color:#00007F">If</SPAN> TypeName(varInput) = "Range" <SPAN style="color:#00007F">Then</SPAN> aTemp = varInput.value
<SPAN style="color:#00007F">If</SPAN> IsEmpty(aTemp) <SPAN style="color:#00007F">Then</SPAN> aTemp = varInput: blnArray = <SPAN style="color:#00007F">True</SPAN>
iDim = Split(CountNumOfElement(aTemp), ",")
iCnt = 1
<SPAN style="color:#00007F">For</SPAN> iCol = 1 <SPAN style="color:#00007F">To</SPAN> iDim(UBound(iDim))
<SPAN style="color:#00007F">If</SPAN> blnArray = <SPAN style="color:#00007F">True</SPAN> <SPAN style="color:#00007F">Then</SPAN>
<SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> Dic.exists(aTemp(iCol)) <SPAN style="color:#00007F">Then</SPAN>
<SPAN style="color:#00007F">If</SPAN> IsEmpty(aTemp(iCol)) = <SPAN style="color:#00007F">False</SPAN> <SPAN style="color:#00007F">Then</SPAN>
Dic.Add aTemp(iCol), iCnt
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
iCnt = iCnt + 1
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">Else</SPAN>
<SPAN style="color:#00007F">For</SPAN> iRow = 1 <SPAN style="color:#00007F">To</SPAN> iDim(LBound(i<SPAN style="color:#00007F">Dim</SPAN>)) / iDim(UBound(i<SPAN style="color:#00007F">Dim</SPAN>))
<SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> Dic.exists(aTemp(iRow, iCol)) <SPAN style="color:#00007F">Then</SPAN>
<SPAN style="color:#00007F">If</SPAN> IsEmpty(aTemp(iRow, iCol)) = <SPAN style="color:#00007F">False</SPAN> <SPAN style="color:#00007F">Then</SPAN>
Dic.Add aTemp(iRow, iCol), iCnt
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
iCnt = iCnt + 1
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">Next</SPAN> iRow
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">Next</SPAN> iCol
iCnt = 1
<SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> vItem <SPAN style="color:#00007F">In</SPAN> Dic
<SPAN style="color:#00007F">ReDim</SPAN> <SPAN style="color:#00007F">Preserve</SPAN> arrUnique(1 <SPAN style="color:#00007F">To</SPAN> iCnt)
arrUnique(iCnt) = vItem
iCnt = iCnt + 1
<SPAN style="color:#00007F">Next</SPAN> vItem
UniqueList = arrUnique
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Function</SPAN>
<SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Function</SPAN> CountNumOfElement(<SPAN style="color:#00007F">ByVal</SPAN> buf) <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN>
Dim iDims <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, iInt <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, iRows <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, iCols <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, lb <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>
Dim DummyArr() <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>
iDims = 1: iRows = 1
<SPAN style="color:#00007F">If</SPAN> TypeName(buf) <SPAN style="color:#00007F">Like</SPAN> "Variant()" <SPAN style="color:#00007F">Then</SPAN>
DummyArr = buf
i<SPAN style="color:#00007F">Dim</SPAN>s = GetNumberOfDim(DummyArr)
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">For</SPAN> iInt = 1 <SPAN style="color:#00007F">To</SPAN> iDims
lb = <SPAN style="color:#00007F">LBound</SPAN>(buf, iInt)
iCols = <SPAN style="color:#00007F">UBound</SPAN>(buf, iInt)
iRows = iRows * (iCols - lb + 1)
<SPAN style="color:#00007F">Next</SPAN>
CountNumOfElement = <SPAN style="color:#00007F">CStr</SPAN>(iRows & "," & iCols)
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Function</SPAN>
<SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Function</SPAN> GetNumberOfDim(<SPAN style="color:#00007F">ByRef</SPAN> vMultiDimArr <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>) <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>
<SPAN style="color:#007F00">'http://puremis.net/excel/code/076.shtml</SPAN>
Dim i <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, j <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, k <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>
<SPAN style="color:#00007F">If</SPAN> VarType(vMultiDimArr) & vbArray = 0 <SPAN style="color:#00007F">Then</SPAN>
GetNumberOfDim = -1
<SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Function</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
RtlMoveMemory i, <SPAN style="color:#00007F">ByVal</SPAN> VarPtr(vMultiDimArr) + 8, 4
RtlMoveMemory j, <SPAN style="color:#00007F">ByVal</SPAN> i, 4
RtlMoveMemory k, <SPAN style="color:#00007F">ByVal</SPAN> j, 2 <SPAN style="color:#007F00">'Get Number of Dimensions</SPAN>
GetNumberOfDim = k
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Function</SPAN>
</FONT>
HTH