2017-03-09 29 views
0

我有下面的代码,列出从数组唯一值:从第18行开始的vba列表数组?

Sub LIST() 
    Dim arr As New Collection, a 
    Dim aFirstArray() As Variant 
    Dim i As Long 

    aFirstArray() = Array("Banana", "Apple", "Orange", "Tomato", "Apple", _ 
    "Lemon", "Lime", "Lime", "Apple") 

    On Error Resume Next 
    For Each a In aFirstArray 
    arr.Add a, a 
    Next 


    For i = 18 To arr.Count 
    Cells(i, 3) = arr(i) 
    Next 

End Sub 

我想列出从行18这些值开始,但是当我设置I = 18,这并不一个没有上市的工作。请有人告诉我我要去哪里错了吗?

+1

我相信你想'对于i = 18〜18 + arr.Count '。目前,'arr.count'将会是9(或7),并且你不能为'i = 18到[任何小于18的数字]' – BruceWayne

+1

集合中只有7个itmes,你正在尝试引用编号18 –

+5

对于i = 1至arr.Count:单元格(i + 17,3)= arr(i):Next' – Comintern

回答

2

你可以切换到Dictionary对象,并利用其键的属性:

Sub LIST() 
    Dim aFirstArray() As Variant, a As Variant 

    aFirstArray() = Array("Banana", "Apple", "Orange", "Tomato", "Apple", "Lemon", "Lime", "Lime", "Apple") 

    With CreateObject("Scripting.Dictionary") 
     For Each a In aFirstArray 
      .Item(a) = a 
     Next 
     Cells(18, 3).Resize(.Count) = Application.Transpose(.Keys) 
    End With 

End Sub 
+0

@ user7415328,你通过了吗? – user3598756

0

或之后删除重复的:

arr = Array("Banana", "Apple", "Orange", "Tomato", "Apple", "Lemon", "Lime", "Lime") 
Set r = [C18].Resize(UBound(arr) + 1) 
r = Application.Transpose(arr) 
r.RemoveDuplicates 1