簡體   English   中英

Excel VBA 減去兩個日期以計算整個列中的天數

[英]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

上面的代碼工作正常並經過測試。 很少有事情改變和糾正。

  1. Cells(nl + 1, 2) = diff將用 diff 覆蓋同一列中的下一行,這應該轉移到下一列

  2. Format(Date, "DD-MM-YY")更改為 YYYY 以避免混淆 19 世紀或 20 世紀

  3. with不是必需的

  4. 我已將 for 循環更改為從第 2 行開始,您可以將其更改回 1,但請確保其不為空,否則會出現溢出錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM