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
答案 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所述,您在区域日期设置方面遇到了一些问题。