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

Arrays 如何在vba中对数组中的日期进行排序?,arrays,vba,sorting,excel,Arrays,Vba,Sorting,Excel,您好,我是编程新手,刚刚开始学习VBA for excel。我有一个关于数组排序的问题。如何对包含日期的数组进行排序?例如,如果我有一个包含日期的数组(“2013年7月23日”、“2010年1月11日”、“2009年5月1日”、“2004年2月3日”),如何对该数组进行排序。我在互联网上到处搜索答案,但只能找到数字排序的代码。我已经为此绞尽脑汁两天了,但似乎还没弄明白 谢谢 我有下面的代码,它从一个选定的列中提取日期,但每当我运行它时,我都会收到一个错误。两天来我一直在想它到底出了什么问题。我之

您好,我是编程新手,刚刚开始学习VBA for excel。我有一个关于数组排序的问题。如何对包含日期的数组进行排序?例如,如果我有一个包含日期的数组(“2013年7月23日”、“2010年1月11日”、“2009年5月1日”、“2004年2月3日”),如何对该数组进行排序。我在互联网上到处搜索答案,但只能找到数字排序的代码。我已经为此绞尽脑汁两天了,但似乎还没弄明白

谢谢

我有下面的代码,它从一个选定的列中提取日期,但每当我运行它时,我都会收到一个错误。两天来我一直在想它到底出了什么问题。我之前没有提到这段代码,因为我认为这必然会增加混乱。 子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
Sub-GetUniqueAndCount()
尺寸d作为对象,c作为范围,k,tmp作为字符串
Set d=CreateObject(“scripting.dictionary”)
'我将选择日期列
对于选择中的每个c
tmp=微调(c值)
如果Len(tmp)>0,则
如果年份(日期值(格式(tmp,“dd-mmm-yy”))=2013年,则
d(tmp)=d(tmp)+1
如果结束
如果结束
下一个c
i=0
将此数组(UBound(d.keys))重拨为日期
对于每个k In d键
此数组(i)=日期值(格式(k,“dd-mmm-yy”))
i=i+1
下一个k
排序(ThisArray)
端接头
子排序(arr()作为日期)
变暗温度为日期
我想我会坚持多久
Dim j尽可能长
对于j=2至UBound(arr)
温度=arr(j)
对于i=j-1至1步骤-1
If(arr(i)您的
排序(arr()As Date)
工作正常。问题在于这一行

Sort (ThisArray)
换成

Sort ThisArray
另外,由于您正在
此数组中存储
日期
,我希望您已将其声明为
日期

示例

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

这可能会有帮助。可以自由地提出后续问题

Sub Sort()
Dim x As Long, y As Long, z As Long
    For x = Application.WorksheetFunction.Min(Columns("M")) To Application.WorksheetFunction.Max(Columns("M"))
        For y = 1 To Worksheets("Users Info").Cells(Rows.Count, 13).End(xlUp).Row
        If Worksheets("Users Info").Cells(y, 13).Value = i Then
            z = z + 1
            Worksheets("Users Info").Cells(z, 14).Value = i
        End If
        Next y
    Next x
End Sub

您是否有日期数组或看起来像日期的字符串数组?如果它们是实际日期,那么它们应该像数字一样可排序(因为excel实际上将日期存储为数字)。您能否在格式化之前提供一个值示例,即单元格中存在的值?是的,它们如下所示:23-jul-13、“11-jan-10”2009年5月1日,“2月3日”Hi Siddharth Rout,谢谢,我找到了问题所在,您的代码帮助我解决了问题。这是一个非常简单的错误。我认为排序方法是一个预定义的VBA函数,因此不接受任何参数。此外,我还更改了排序语法(ThisArray)对这个数组进行排序。代码运行得非常好。我不知道如何感谢你或给你+1,因为我需要一个15人的代表来这样做。很抱歉……我没有注意到你在代码上面的评论。是的,你是对的,问题是这行排序(这个数组)正如您提到的欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮({}),或者使用键盘上的Ctrl+K来很好地格式化和语法突出显示它!
Sub Sort()
Dim x As Long, y As Long, z As Long
    For x = Application.WorksheetFunction.Min(Columns("M")) To Application.WorksheetFunction.Max(Columns("M"))
        For y = 1 To Worksheets("Users Info").Cells(Rows.Count, 13).End(xlUp).Row
        If Worksheets("Users Info").Cells(y, 13).Value = i Then
            z = z + 1
            Worksheets("Users Info").Cells(z, 14).Value = i
        End If
        Next y
    Next x
End Sub