2016-06-08 41 views
0

以下代码过滤来自列的唯一值。我试图在控制台中显示输出,但是,我收到“下标超出范围”错误。函数的数组输出是否正确地传递给变量?如果不是,那么问题是什么?任何帮助是极大的赞赏。VBA在列表中显示唯一值

Sub test1() 

Dim Member() As String 

Member = UnqiueMembers() 
Debug.Print Member(1) 

End Sub 

' get unique members from input data 
Public Function UnqiueMembers() As String() 

Const inputSheetName = "Input Data" 
Const inputRange = "A3:A9" 

Dim productWS As Worksheet 
Dim uniqueList() As String 'dyanmic array 
Dim productsList As Range 
Dim anyProduct 
Dim LC As Integer 

ReDim uniqueList(1 To 1) 
Set productWS = Worksheets(inputSheetName) 
'Set outputWS = Worksheets(outputSheetName) 
Set productsList = productWS.Range(inputRange) 
Application.ScreenUpdating = False 
For Each anyProduct In productsList 
    If Not IsEmpty(anyProduct) Then 
    If Trim(anyProduct) <> "" Then 
     For LC = LBound(uniqueList) To UBound(uniqueList) 
     If Trim(anyProduct) = uniqueList(LC) Then 
      Exit For ' found match, exit 
     End If 
     Next 
     If LC > UBound(uniqueList) Then 
     'new item, add it 
     uniqueList(UBound(uniqueList)) = Trim(anyProduct) 
     'make room for another 
     ReDim Preserve uniqueList(1 To UBound(uniqueList) + 1) 
     End If 
    End If 
    End If 
Next ' end anyProduct loop 
If UBound(uniqueList) > 1 Then 
    'remove empty element 
    ReDim Preserve uniqueList(1 To UBound(uniqueList) - 1) 
End If 


UniqueMembers = uniqueList() 

End Function 
+1

简单'UniqueMembers = uniqueList'不带括号就可以了; ) –

+0

不幸的是,我仍然收到错误 – dfj328

+1

工作簿中是否有名为** Input Data **的工作表? – MutjayLee

回答

0

如果我正确地阅读本。如果你想要这个唯一的列表。使用集合。并拒绝dups。

Dim t As Collection 

Set t = New Collection 
Dim t As Collection 
Set t = New Collection 

On Error Resume Next 
t.Add "product name", "product name" 
t.Add "product name", "product name" 
t.Add "product name", "product name" 
t.Add "product name", "product name" 
t.Add "product name", "product name" 
t.Add "product name", "product name" 

On Error GoTo 0 

该集合将不允许添加任何重复值。 t会自动变得独一无二。

1

另一个Option Explicit候选人:函数名称是UnqiueMembers,但你被UniqueMembers = uniqueList()

这两个名字都没有返回值相同;-(