比较具有特定日期时间格式(VBA)的日期

时间:2017-01-15 14:04:09

标签: excel vba date datetime

编辑:根据答案,我能够从范围中获得最小/最大日期:

Dim dt As Date
dt = WorksheetFunction.Min(Range("D2:D300"))

但这还不够。如何将此函数与数组而不是范围一起使用?

原帖: 我有以下专栏:

enter image description here

格式为: DD / MM / YYYY HH:MM

我正在尝试从第一列获取最快的日期时间,从第二列获取最新的日期时间。在这种情况下:

  

02/01/2017 6:07(从1月2日第一列开始列出日期时间)

     

02/02/2017 14:11(2月2日第二栏的最新日期时间)

我有一个多维数组(myData),其中包含来自单元格的值,我的函数就是这些:

Private Function GetLatestDateFromData() As String
  Dim latestDate As String
  Dim i As Long

  latestDate = myData(1, ColumnsIndex(3) - 1)

  For i = 1 To UBound(myData, 1) - 1
      If latestDate < myData(i, ColumnsIndex(3) - 1) Then
          latestDate = myData(i, ColumnsIndex(3) - 1)
      End If
  Next
  GetLatestDateFromData = latestDate
End Function

Private Function GetEarliestDateFromData() As String
  Dim earliestDate As String
  Dim i As Long

  earliestDate = myData(1, ColumnsIndex(2) - 1)

  For i = 1 To UBound(myData, 1) - 1
      If earliestDate > myData(i, ColumnsIndex(2) - 1) Then
          earliestDate = myData(i, ColumnsIndex(2) - 1)
      End If
  Next

  GetEarliestDateFromData = earliestDate
End Function

问题是我的结果如下:

startingFrom = DateValue(GetEarliestDateFromData) 'returns 01/02/2017, 1st of February
untilDate = DateValue(GetLatestDateFromData) 'returns 01/06/2017, 1st of June

似乎我的日期格式有问题。不知何故,几天和几个月是混合的。我该如何解决?

由于

编辑:DateSerial(如链接线程中所示)不适用于此,因为我不仅关心日期,还关注时间。 DateSerial仅以年 - 月 - 日为参数。

1 个答案:

答案 0 :(得分:1)

要修复日期,请使用格式化功能,例如

date = Format(value, "MM\/DD\/YYYY")

您可以更轻松地比较实际值(例如02/01/2017 06:07等于42737,2548611111),它们与显示的格式无关。

此外,我建议你使用WorksheetFunction.Max函数,这是与excel Max函数同等的vba函数,返回你范围内最大的vaule,如:

date = WorksheetFunction.Max(your_used_range)