2015-02-09 44 views
0

過濾我提取從列唯一值,並把它們在陣列中與這樣的代碼:在陣列獲取「獨特的」而不對片

Range("A1:A27").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Z1"), Unique:=True 
Univoci = Range("Z1").CurrentRegion.Value 

的問題是:有可能把它們直接放入數組?

我的意思是用一個命令或用最少的代碼(我知道我可以通過與他人的每一項比較得到的唯一值)

在此先感謝

回答

0

我不知道有一種方法來initalise和充滿蝙蝠唯一值的數組,但你可以使用字典來建立獨特的條目

Set Dict = CreateObject("Scripting.Dictionary") 
    For Each Cell In Range("A1:A27") 
    If Not Dict.Exists(Cell.Value) Then Dict.Add Cell.Value, Cell.Address 
    Next 

    Dim itemArray() As Variant 
    ReDim itemArray(0 To Dict.Count - 1) 
    For Each Value In Dict.Keys 
    itemArray(i) = Value 
    i = i + 1 
    Next 

您可能不需要將字典轉換爲數組,因爲您可以直接訪問字典鍵值以進一步編碼,這也會削減代碼行。

+0

謝謝,它的工作原理,它似乎非常快,但是當我在宏中運行它時,快速? – genespos 2015-02-10 10:21:07

0

這將讓列獨特的文本項目A和把他們列B

Sub GetuniqueItems() 

    Dim Rws As Long, Rng As Range, c 
    Dim Col As New Collection, Ar(), x 

    Rws = Cells(Rows.Count, "A").End(xlUp).Row 
    Set Rng = Range(Cells(2, 1), Cells(Rws, 1)) 

    On Error Resume Next 

    For Each c In Rng.Cells 

     Col.Add c.Value, c.Value 

    Next c 

    On Error GoTo 0 

    ReDim Ar(1 To Col.Count) 

    For x = 1 To Col.Count 

     Ar(x) = Col(x) 

    Next x 

    Range("B1").Resize(Col.Count, 1).Value = WorksheetFunction.Transpose(Ar) 

End Sub 
+0

我跑了它,但「上校」不會從選定的範圍中取任何值(沒有顯示錯誤) – genespos 2015-02-10 09:52:54