为什么我的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设置上有一些问题。