Sub Filter(sArray As String)
Dim SubArr, Arr
If Sheets("Sheet1").Range(sArray).Count = 1 Then
ReDim Arr(0)
Arr(0) = Sheets("sheet1").Range(sArray).Value
GoTo Finish
End If
Set Dic = CreateObject("Scripting.Dictionary")
SubArr = Sheets("sheet1").Range(sArray).Value
ReDim Arr(1 To UBound(SubArr, 1) * UBound(SubArr, 2), 1 To 1)
For i = LBound(SubArr, 1) To UBound(SubArr, 1) * UBound(SubArr, 2)
If i > UBound(SubArr, 1) Then
If CStr(SubArr(i - UBound(SubArr, 1), 2)) <> "" And _
Not Dic.Exists(CStr(SubArr(i - UBound(SubArr, 1), 2))) Then
Dic.Add CStr(SubArr(i - UBound(SubArr, 1), 2)), ""
Arr(Dic.Count, 1) = SubArr(i - UBound(SubArr, 1), 2)
End If
Else
If CStr(SubArr(i, 1)) <> "" And Not Dic.Exists(CStr(SubArr(i, 1))) Then
Dic.Add CStr(SubArr(i, 1)), ""
Arr(Dic.Count, 1) = SubArr(i, 1)
End If
End If
Next
Finish:
Sheets("sheet2").[A1].Resize(UBound(Dic.Keys, 1) + 1).Value = Arr
End Sub
Sub Main()
Dim sArray As String
sArray = "A1:B1000"
Call Filter(sArray)
End Sub