返回列表 上一主題 發帖

[發問] EXCEL 對1900年以前的日期,如何相加減

[發問] EXCEL 對1900年以前的日期,如何相加減

本帖最後由 dou10801 於 2023-5-4 16:21 編輯

請教各位先進,EXCEL 對1900年以前的日期,如何相加減.
[例]:  1850/5/20-1850/5/15=5
杜小平

看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

本帖最後由 Andy2483 於 2023-5-5 08:05 編輯

回復 1# dou10801


    謝謝前輩發表此主題
後學學習方案如下,請前輩參考

執行結果:
20230505_1.jpg
2023-5-5 07:58


Sub TEST_20230505_1()
MsgBox CDate("1850/5/20") - CDate("1850/5/15")
End Sub

Sub TEST_20230505_2()
Dim D1 As Date, D2 As Date
D1 = "1850/5/20": D2 = "1850/5/15"
MsgBox D1 - D2
End Sub

Sub TEST_20230505_3()
MsgBox CDate("1850/5/15") + 5
End Sub

Sub TEST_20230505_4()
MsgBox CDate("1850/5/20") - 5
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

回復 3# Andy2483 如附件,敬請前輩指導,謝謝.

相減天數.rar (7.57 KB)

杜小平

TOP

回復 4# dou10801


    謝謝前輩回復
後學藉此帖練習陣列與公曆日期的檢測,學習方案如下,請前輩參考

執行前:
20230508_1.jpg
2023-5-8 11:02


檢測出非公曆日:
20230508_2.jpg
2023-5-8 11:02


修正日期後執行結果:
20230508_3.jpg
2023-5-8 11:03



Option Explicit
Sub TEST()
Dim Brr, Crr, i&, N&, Ds As Date, Dn As Date
Brr = Range([A2], Cells(Rows.Count, "A").End(3))
ReDim Crr(1 To UBound(Brr), 1 To 2)
For i = 1 To UBound(Brr)
   If Not IsDate(Brr(i, 1)) Then Crr(i, 1) = "←非公曆日": N = N + 1
Next
'↑先設迴圈檢測日期是否為正確公曆日期
If N > 0 Then [B2].Resize(UBound(Crr), 2) = Crr: MsgBox "資料錯誤! 請修正後再執行!": Exit Sub
'↑如果有錯必須先修正錯誤,再重新執行
For i = 1 To UBound(Brr) - 1
   Crr(i, 1) = Brr(i + 1, 1) & "-" & Brr(i, 1)
   Ds = Brr(i + 1, 1): Dn = Brr(i, 1): Crr(i, 2) = Ds - Dn
   '↑由於變數宣告,會自動將字串轉換為日期
Next
[B2].Resize(UBound(Crr), 2) = Crr
Erase Brr, Crr
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題