如何在vba中对数组中的日期进行排序?

use*_*707 5 arrays sorting excel vba excel-vba

嗨,我是编程新手,刚开始学习VBA for excel.我有关于数组排序的查询.如何对包含日期的数组进行排序?例如,如果我有一个包含日期的数组("23-jul-13","11-jan-10","1-may-09","3-feb-04"),我该如何对这个数组进行排序.我在互联网上搜索了答案,但只能找到排序数字的代码.我已经绞尽脑汁待了2天,但似乎无法得到它.

谢谢

我有下面的代码从选定的列中获取日期,但每次运行它时都会收到错误.我一直试图弄清楚它有什么问题.我之前没有提到过这段代码,因为它会不必要地增加混乱.子GetUniqueAndCount工作正常,但它是sort子,这是问题,因为它不接受作为参数传递给它的数组.

Sub GetUniqueAndCount()
Dim d As Object, c As Range, k, tmp As String

  Set d = CreateObject("scripting.dictionary")
  'I will select the column of dates
 For Each c In Selection
  tmp = Trim(c.Value)
  If Len(tmp) > 0 Then
  If Year(DateValue(Format(tmp, "dd-mmm-yy"))) = 2013 Then
  d(tmp) = d(tmp) + 1
  End If
  End If
  Next c
  i = 0
  ReDim ThisArray(UBound(d.keys)) As Date
  For Each k In d.keys
  ThisArray(i) = DateValue(Format(k, "dd-mmm-yy"))
  i = i + 1

  Next k
  Sort (ThisArray)
End Sub


Sub Sort(arr() As Date)

  Dim Temp As Date
  Dim i As Long
  Dim j As Long

  For j = 2 To UBound(arr)

  Temp = arr(j)
  For i = j - 1 To 1 Step -1
  If (arr(i) <= Temp) Then GoTo 10
  arr(i + 1) = arr(i)

  Next i
  i = 0
10  arr(i + 1) = Temp


  Next j
  End Sub
Run Code Online (Sandbox Code Playgroud)

Sid*_*out 6

你的Sort(arr() As Date)作品很好.问题出在这条线上

Sort (ThisArray)
Run Code Online (Sandbox Code Playgroud)

将其更改为

Sort ThisArray
Run Code Online (Sandbox Code Playgroud)

此外,由于你是存储DatesThisArray,我希望你已经宣布它作为Date

Sub Sample()
    Dim ThisArray(1 To 5) As Date

    ThisArray(1) = #12/13/2013#
    ThisArray(2) = #12/13/2012#
    ThisArray(3) = #12/13/2015#
    ThisArray(4) = #12/13/2014#
    ThisArray(5) = #12/13/2016#

    SortAr ThisArray

    For i = 1 To 5
        Debug.Print ThisArray(i)
    Next i
End Sub

Sub SortAr(arr() As Date)
    Dim Temp As Date
    Dim i As Long, j As Long

    For j = 2 To UBound(arr)
        Temp = arr(j)
        For i = j - 1 To 1 Step -1
            If (arr(i) <= Temp) Then GoTo 10
                arr(i + 1) = arr(i)
        Next i
        i = 0
10:     arr(i + 1) = Temp
    Next j
End Sub
Run Code Online (Sandbox Code Playgroud)

OUTPUT

13/12/2012 
13/12/2013 
13/12/2014 
13/12/2015 
13/12/2016 
Run Code Online (Sandbox Code Playgroud)