具有约会范围的日期功能

时间:2017-03-15 20:21:02

标签: vba range datediff

我正在将工作表中的所有数据复制到变体数组中。第1列的时间戳如下。

  

Thu Mar 02 01:14:28 EST

我想在1分钟的时间内处理所有行。我正在使用datediff函数来找出分钟的差异。但不知何故,它并没有按照预期运作。 这是代码。

    For i = 1 To UBound(vBaseArray)
          dSavedDate = convertDate(vBaseArray(i,1)) 'function to convert string to date
.....          some code
          For j = i To UBound(vBaseArray) 'function to convert string to date

               If DateDiff("n", dSearchDate, dSavedDate) >= 1 And DateDiff("n", dSearchDate, dSavedDate) <= 2 Then

                 ----some code

但结果不符合预期 如果dSavedDate是Thu Mar 02 01:14:28 2017那么 if语句在时间戳之后返回

  

Thu Mar 02 01:12:24 EST 2017

     

Thu Mar 02 01:12:44 EST 2017

     

Thu Mar 02 01:12:40 EST 2017

     

Thu Mar 02 00:47:12 2017

而我想要的时间戳是&gt; = dSavedDate的1分钟

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Date变量在内部表示为Double,时间部分为小数点右侧的小数日。您可以直接减去它们并使用增量来查看它们是否在一分钟之内:

Public Function WithinOneMinute(first As Date, second As Date) As Boolean
    Const ONE_MINUTE As Double = 1 / 24 / 60
    Dim difference As Date
    difference = Abs(first - second)
    WithinOneMinute = difference <= ONE_MINUTE
End Function

然后你可以在你的循环中调用它:

    For i = 1 To UBound(vBaseArray)
      dSavedDate = convertDate(vBaseArray(i, 1))
      For j = i To UBound(vBaseArray)
           If Not WithinOneMinute(dSearchDate, dSavedDate) Then