为什么我的DateDiff返回0?

A列是StartDate

B列是EndDate

当我运行macros时,会返回所有date的答案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 

你的代码实际上对我来说运行良好 – 但我确定列A和B中的值实际上是date。 如果您不确定这一点,那么使用CDate函数确保单元格中的值在传递给DateDiff函数之前转换为date

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 

编辑

我刚刚读到这里说南非date格式有问题:

..我的地区是“英语(南非)”),我有date分隔符为“/”,但Excel不断更改为“ – ”。 …

所以也许这是值得检查您的区域设置,也许重新格式化date为dd/mmm/yyyy而不是dd-mmm-yyyy并检查输出。

也许CDATE函数毕竟不是必需的(正如我提到你的代码在澳大利亚英文区域设置上下文中运行良好)。

另外,而不是一个函数只是写一个公式:

 =ROUND(B2-A2+1,0) 

为什么你需要过时的function。 获得天差异使用

days = enddays – startdate

你的代码在excel 2016在寡妇工作正常。 正如@RobinMackenzie所提到的,你在区域date设置上有一些问题。