为什么我的DateDiff返回0?

时间:2017-02-15 13:56:42

标签: excel vba excel-vba datediff

A栏是StartDate

B列是EndDate

当我运行宏时,它返回我所有日期的答案1,因为我在我的DateDiff中添加1,然后DateDiff必须为0.

我的DateDiff有什么问题?

Sub CalculateDays()
    Dim LastRow As Long
    Dim StartDate As Date
    Dim EndDate As Date
    Dim Days As Single

    With Worksheets("Sheet1")
        'Determine last Row in Column A
         LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
         'Calculate Difference between Start Date And End Date in Days
         For i = 2 To LastRow
             StartDate = .Cells(i, 1)
             EndDate = .Cells(i, 2)
             Days = DateDiff("d", StartDate, EndDate)
             .Cells(i, 3) = Days + 1
             Days = 0
         Next i
     End With

 End Sub

示例数据:

Start Date |    End Date  
=========================
13-Feb-17  |    28-Feb-17 
14-Feb-17  |    28-Feb-17 
02-Mar-17  |    04-Mar-17 
13-Feb-17  |    15-Feb-17 
13-Feb-17  |    13-Feb-17 
15-Jan-17  |    15-Feb-17 
01-Feb-17  |    12-Feb-17 

3 个答案:

答案 0 :(得分:2)

您的代码实际上对我来说运行正常 - 但我确定 A列和B列中的值实际上是日期。如果您不确定,请使用CDate函数确保在传递给DateDiff函数之前将单元格中的值转换为日期,例如

StartDate = CDate(.Cells(i, 1).Value)

您的代码添加在:

Option Explicit

Sub CalculateDays()
    Dim LastRow As Long
    Dim StartDate As Date
    Dim EndDate As Date
    Dim Days As Single
    Dim i As Long

    With Worksheets("Sheet1")
        'Determine last Row in Column A
         LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
         'Calculate Difference between Start Date And End Date in Days
         For i = 2 To LastRow
             StartDate = CDate(.Cells(i, 1).Value)
             EndDate = CDate(.Cells(i, 2).Value)
             Days = DateDiff("d", StartDate, EndDate)
             .Cells(i, 3) = Days + 1
             Days = 0
         Next i
     End With

 End Sub

修改

我刚刚阅读了this,其中指出了南非日期格式的问题:

  

..我的地区是“英语(南非)”)我将日期分隔符设为“/”,但Excel不断将其更改为“ - ”。 ...

所以也许值得检查您的区域设置,并且可能会将日期重新格式化为dd/mmm/yyyy而不是dd-mmm-yyyy并检查输出。

可能毕竟不需要CDATE函数(正如我在澳大利亚英语区域设置环境中提到的那样,我的代码运行正常)。

答案 1 :(得分:0)

或者,代替函数只需编写公式:

=ROUND(B2-A2+1,0)

答案 2 :(得分:-1)

为什么你需要约会功能。使用

获得日差

days = enddays - startdate

你的代码在寡妇的excel 2016中运行良好。如@RobinMackenzie所述,您在区域日期设置方面遇到了一些问题。