Hai chức năng sẽ tính toán số ngày trong tuần và ngày cuối tuần:
Function NumWeekendDays(dBegin As Date, dEnd As Date) As Long
Dim iPartial As Integer
Dim lBeginDay As Long
Dim lNumWeekendDays As Long
iPartial = DateDiff("d", dBegin, dEnd + 1) Mod 7
lBeginDay = 6 - DatePart("w", dBegin, vbMonday)
lNumWeekendDays = (DateDiff("d", dBegin, dEnd + 1) \ 7) * 2
If iPartial > 0 And lBeginDay - iPartial < 0 Then
If lBeginDay = -1 Then
lNumWeekendDays = lNumWeekendDays + 1
ElseIf iPartial - lBeginDay = 1 Then
lNumWeekendDays = lNumWeekendDays + 1
Else
lNumWeekendDays = lNumWeekendDays + 2
End If
End If
NumWeekendDays = lNumWeekendDays
End Function
Function NumWeekDays(dBegin As Date, dEnd As Date) As Long
NumWeekDays = DateDiff("d", dBegin, dEnd + 1) - NumWeekendDays(dBegin, dEnd)
End Function
Lưu ý: Tôi tìm thấy nó đơn giản nhất để tính toán những ngày cuối tuần phần tuần bằng cách tính toán biến lBeginDay
để nếu ngày bắt đầu là Thứ hai, lBeginDay == 5
... nếu ngày bắt đầu là Thứ Sáu, lBeginDay == 1
, v.v ... Các biến thể khác cũng sẽ hoạt động.
Nguồn
2012-01-09 06:55:08
Bạn có thể sử dụng chức năng NETWORKDAYS không? Mã Pseudo: TotalDays qua một datediff hai ngày Run NETWORKDAYS chức năng trên hai ngày Trừ Ngày làm việc từ Totaldays cho ngày cuối tuần. – jetgrrrl
Hàm NETWORKDAYS là một hàm bảng tính Excel có giá trị, nhưng nó không tồn tại trong VBA. –