【问题标题】:find unique dates in excel vba array在excel vba数组中查找唯一日期
【发布时间】:2011-06-27 02:05:36
【问题描述】:

我有一个包含每天多次测量的数据集。我已经将数据放入 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

我查看了一些用户定义的唯一值函数,但它们操作的是数值,而不是日期类型。

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

【问题讨论】:

    标签: vba date excel unique


    【解决方案1】:

    没有简单的方法来实现这个功能。

    我能想到的最简单的就是使用过滤功能

    过滤器返回一个数组,其中包含与过滤器匹配的数组值。

    逻辑上是这样的:

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

    希望这会有所帮助。

    我知道这种语法与 vba 无关,它只是我个人会采用的合乎逻辑的方法。

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

        出于过滤目的,我会使用一个集合。我创建了一个模拟 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
        

        【讨论】:

          猜你喜欢
          • 2012-08-19
          • 1970-01-01
          • 1970-01-01
          • 2014-06-29
          • 2011-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-19
          相关资源
          最近更新 更多