Tính thời gian nghỉ bù khi cho các ngày lễ trùng vào ngày thứ 7, CN

Liên hệ QC
Mình đổi như vậy vẫn chưa đúng bạn xem giúp +-+-+-+ :
Bạn sai chổ này:
Dk1 = Weekday(Startday + i, vbMonday)
mà bạn ghi là:
Dk1 = Weekday(Startday + i, vbSunday)
Tôi sai chổ này:
Dk1 = Weekday(Startday + i, vbMonday) <5
mà lý ra phải là:
Dk1 = Weekday(Startday + i,vbMonday) <6
Sửa lại:
PHP:
Function Workday(Startday As Date, Days As Long, Optional Holidays As Range, Optional FromFirstDay As Boolean = True) As Date
  Dim i As Long, Dk1 As Boolean, Dk2 As Boolean, Dk3 As Boolean
  On Error Resume Next
  If Days <= 0 Or IsDate(Startday) = False Then Exit Function
  If Holidays Is Nothing Then Dk2 = True: Dk3 = True
  i = 1 + FromFirstDay
  Do
    Dk1 = Weekday(Startday + i, vbMonday) < 6
    Dk2 = WorksheetFunction.CountIf(Holidays, Startday + i) = 0
    Dk3 = WorksheetFunction.CountIf(Holidays, Format(Startday + i, "mm-dd")) = 0
    If Dk1 And Dk2 And Dk3 Then Workday = Startday + i: Days = Days - 1
    i = i + 1
  Loop Until Days = 0
End Function
Bạn test lại xem
 

File đính kèm

  • Test.xls
    38.5 KB · Đọc: 35
các bác cho em hỏi thêm là nếu ngày thứ 7 chỉ tính là 0.5 ngày làm việc, rồi ngày lễ lại trùng vào ngày thứ 7 thì ta chỉ trừ 0.5 ngày thôi thì lúc đó code sẽ chỉnh sửa thế nào ạ (em chỉ biết sửa theo các bác chỉ dẫn chứ chẳng rành về code đâu ạ)
 
em xin lỗi đã nói lộn, nếu ngày lễ trùng vào ngày thứ 7 thì trừ tới 1.5 ngày ạ
 
Hi các bạn,

Tham khảo bài viết này mình thấy rất hay.
Rất cám ơn kiến thức bổ ich của bạn ndu96081631. Mình có dùng thử file của bạn thì thấy chưa tính toán cho trường hợp làm 0.5 ngày. Tức nếu số ngày là chẵn thì tính rất đúng, nhưng khi ngày bị lẻ thì tính không chính xác. Nếu được bạn xem có cách nào cải tiến lại không vì nó rất hữu ích khi dùng làm lập lịch schedule (tính luôn ngày bắt đầu, trừ ra các ngày T7-CN-Holidays).
Thật ra hàm WORKDAY dùng cũng rất tốt nhưng nó có 1 nhược điểm là không tính luôn giờ. Ví dụ ngày bắt đầu là 2010/08/02 12:00 PM tăng 0.5 ngày dùng hàm WORKDAY thì nó sẽ cho ra kết quả là 2010/08/02 12:00 AM, nếu tăng 1 ngày thì sẽ là 2010/08/03 12:00 AM. Vì thế khi làm 1 file excel tính schedule như yêu cầu trên dùng WORKDAY thì bị sai.

Vài dòng chia sẻ ý kiến.
 
Web KT
Back
Top Bottom