2011-02-14 41 views
1

我有一个数据集,其中包含每天的多个度量。我已经把数据放入VBA数组中了。现在,我想创建一个具有独特日子的阵列。在excel vba数组中找到唯一日期

_Here is my dataset:_ 
12/07/2010  3.5 

12/07/2010  2.1 

12/07/2010  2.2 

12/08/2010  5.2 

12/08/2010  3.2 

12/09/2010  4.7 

这里是我想回到什么:

12/07/2010 

12/08/2010 

12/09/2010 

我看过唯一值几个用户定义的功能,但它们对数值,而不是日期类型进行操作。

任何帮助,非常感谢。谢谢!

回答

2

日期类型是一个数字...

一个简单的方法是使用一个集合:

Sub Uniques() 
    Dim oColl As New Collection 

    Dim vArr As Variant 
    Dim vItem As Variant 
    Dim j As Long 
    vArr = Range("A1:B6") 
    On Error Resume Next 
    For j = LBound(vArr) To UBound(vArr) 
     oColl.Add vArr(j, 1), CStr(vArr(j, 1)) 
    Next j 
    On Error GoTo 0 

    For Each vItem In oColl 
     Debug.Print vItem 
    Next vItem 
End Sub 
1

有没有简单的方法来做这个functin。

我能想到使用过滤功能

滤波器的最简单的返回包含从匹配滤波器,该数组中的值的数组。

所以从逻辑上讲:

arTargetArray as Array 

For each Item in your_array 
    value = Filter(arTargetArray, Item) 
    if value null 
    add item to arTargetArray. 
    end if 
next each 

hopefuly这有助于一点点。

我知道这个语法与vba无关,它只是我亲自采用的逻辑方法。

2

过滤的目的,我会使用一个集合。我创建了一个代表你自己阵列的模拟vArray。

集合不会接受相同的密钥两次,因此会过滤掉dup值。由于“On Error resume next”,我强烈建议您将这段代码分开放在一个特定的功能中。

Sub test() 

    Dim vItem As Variant 
    Dim vArray(5) As Variant 

    vArray(0) = CDate("12/07/2010") 
    vArray(1) = CDate("12/07/2010") 
    vArray(2) = CDate("12/07/2010") 
    vArray(3) = CDate("12/08/2010") 
    vArray(4) = CDate("12/08/2010") 
    vArray(5) = CDate("12/09/2010") 

    Dim colDates As Collection 

    Set colDates = New Collection 

    On Error Resume Next 

    For Each vItem In vArray 
     colDates.Add vItem, CStr(vItem) 
    Next vItem 

End Sub