[英]Excel VBA Substract two dates to count days in entire columns
我正在尝试没有正面结果的 function 计算列“B”、B2:B 范围和单元格“K2”中的今天日期之间的天数差异,结果正在转移到第 7 列,范围:G2: G。 到目前为止,我对 VBA 编码越来越兴奋,但作为一个需要更多经验的人,我想寻求一些帮助来解决这个问题。
Sub DateSub()
Dim strInput As String, strOutput As String
Dim start_date As Date
Dim end_date As Date
Dim diff As Integer
Dim LastRowcheck As Long, n1 As Long
Sheets("T1").Range("K2") = Format(Date, "DD-MM-YY") 'today
end_date = Sheets("T1").Cells(2, 11).Value
LastRowcheck = Sheets("T1").Range("B" & Rows.Count).End(xlUp).Row
For n1 = 1 To LastRowcheck
With Worksheets("T1").Cells(n1, 2)
start_date = Sheets("T1").Cells(n1, 2).Value
diff = DateDiff("D", start_date, end_date) ' HERE IS ISSUE
Cells(nl + 1, 2) = diff
Sheets("T1").Cells(n1 + 1, 7).Select
Selection.NumberFormat = "dd-mm-yy"
End With
Next n1
Application.DisplayAlerts = False
End Sub
不确定这是否是导致溢出的原因,但请注意以下事项。 特别是使用日期,如果使用Integer
数据类型,您很容易得到溢出错误。
根据VBA 数据类型的文档;
Integer 2 bytes -32,768 to 32,767
将diff
的数据类型更改为Long
- Dim diff As Long
。
Long (Long integer) 4 bytes -2,147,483,648 to 2,147,483,647
插入日期值,而不是格式化字符串:
Sheets("T1").Range("K2") = Date 'today
将日期格式应用于 K2。
Sub DateSub()
Dim strInput As String, strOutput As String
Dim start_date As Date
Dim end_date As Date
Dim diff As Integer
Dim LastRowcheck As Long
Dim n1 As Long
Sheets("T1").Range("K2") = Format(Date, "DD-MM-YYYY") 'today
end_date = Sheets("T1").Cells(2, 11).Value
LastRowcheck = Sheets("T1").Range("B" & Rows.Count).End(xlUp).Row
Sheets("T1").Activate
For n1 = 2 To LastRowcheck
start_date = Sheets("T1").Cells(n1, 2).Value
diff = DateDiff("D", start_date, end_date)
Cells(n1, 3) = diff
Cells(n1 + 1, 7).Select
Selection.NumberFormat = "dd-mm-yy"
Next n1
Application.DisplayAlerts = False
End Sub
上面的代码工作正常并经过测试。 很少有事情改变和纠正。
Cells(nl + 1, 2) = diff将用 diff 覆盖同一列中的下一行,这应该转移到下一列
Format(Date, "DD-MM-YY")更改为 YYYY 以避免混淆 19 世纪或 20 世纪
with不是必需的
我已将 for 循环更改为从第 2 行开始,您可以将其更改回 1,但请确保其不为空,否则会出现溢出错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.