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

doanhhoang79

Thành viên hoạt động
Tham gia
31/3/08
Bài viết
142
Được thích
18
Chào các anh chị,

Tôi xin gửi file đính kèm (của một tác giả mà tôi không nhớ tên) về cú pháp đếm ngày. Tôi thấy đây là 01 file rất hay có thể ứng dụng vào thực tế của tôi.
Tuy nhiên sau khi thực hiện, tôi thấy:

Cú pháp đếm ngày chỉ đếm những ngày nghỉ thứ 7, CN và những ngày lễ tết. Điều tôi muốn các anh chị giúp đỡ là nếu những ngày lễ lết mà trùng vào ngày thứ 7, CN thì nó sẽ tự động trừ bù những ngày tương ứng tiếp theo.

VD: ngày lễ 30/4, 01/5, 02/9,..trùng vào ngày T7, CN thì nó sẽ trừ bù vào những ngày thứ 2, thứ 3,...

Mục đích là để tính số ngày nghỉ phép mà nhân viên đã nghỉ (không bao gồm các ngày T7, CN, ngày lễ, và những ngày nghỉ bù trùng ngày lễ).
 

File đính kèm

  • Den ngay.xls
    33 KB · Đọc: 190
Chào các anh chị,

Tôi xin gửi file đính kèm (của một tác giả mà tôi không nhớ tên) về cú pháp đếm ngày. Tôi thấy đây là 01 file rất hay có thể ứng dụng vào thực tế của tôi.
Tuy nhiên sau khi thực hiện, tôi thấy:

Cú pháp đếm ngày chỉ đếm những ngày nghỉ thứ 7, CN và những ngày lễ tết. Điều tôi muốn các anh chị giúp đỡ là nếu những ngày lễ lết mà trùng vào ngày thứ 7, CN thì nó sẽ tự động trừ bù những ngày tương ứng tiếp theo.

VD: ngày lễ 30/4, 01/5, 02/9,..trùng vào ngày T7, CN thì nó sẽ trừ bù vào những ngày thứ 2, thứ 3,...

Mục đích là để tính số ngày nghỉ phép mà nhân viên đã nghỉ (không bao gồm các ngày T7, CN, ngày lễ, và những ngày nghỉ bù trùng ngày lễ).
Tôi nghĩ cái vụ TỰ ĐỘNG BÙ này không thể làm được đâu bạn à! Vì mỗi cty quy định khác nhau... Như cty tôi chẳng hạn, ngày lễ rơi vào ngày CN, có lúc họ cho bù lễ vào thứ 7, có lúc lại cho bù lễ vào thứ 2 ---> Nói chung là tùy tình hình cụ thể mà họ sẽ ra quyết định
Vậy, đơn giản nhất bạn hãy tự kiểm tra các ngày lễ, nếu chúng rơi vào CN, và cty bạn quy định bù lễ vào ngày nào bạn cứ điền thêm vào vùng liệt kê ngày lễ là xong!
Không cần phức tạp hóa vấn đề đâu!
 
Tôi nghĩ cái vụ TỰ ĐỘNG BÙ này không thể làm được đâu bạn à! Vì mỗi cty quy định khác nhau... Như cty tôi chẳng hạn, ngày lễ rơi vào ngày CN, có lúc họ cho bù lễ vào thứ 7, có lúc lại cho bù lễ vào thứ 2 ---> Nói chung là tùy tình hình cụ thể mà họ sẽ ra quyết định
Vậy, đơn giản nhất bạn hãy tự kiểm tra các ngày lễ, nếu chúng rơi vào CN, và cty bạn quy định bù lễ vào ngày nào bạn cứ điền thêm vào vùng liệt kê ngày lễ là xong!
Không cần phức tạp hóa vấn đề đâu!

Cảm ơn anh,
Cho em hỏi thêm, trong trường hợp hết năm 2009 nếu thay thành năm 2010 thì số liệu sẽ bị thay đổi (do thời gian thay đổi).

Làm thế nào để lưu được số liệu năm 2009 và bắt đầu với số liệu mới của năm 2010.

Mong anh chỉ giúp,
 
trong khi hết năm 2009 nếu thay thành năm 2010 thì số liệu sẽ bị thay đổi (do ngày âm thay đổi).
Làm thế nào để lưu được số liệu năm 2009 và bắt đầu với số liệu mới của năm 2010.
Mong anh chỉ giúp,

Bạn cần bỏ luôn các ngày lễ của 2 năm vô vùng tra bảng ngày lễ đó luôn;
 
Giúp mình sử dụng hàm đếm ngày

Chào các anh chị,

Tôi xin gửi file đính kèm (của một tác giả mà tôi không nhớ tên) về cú pháp đếm ngày. Tôi thấy đây là 01 file rất hay có thể ứng dụng vào thực tế của tôi.
Tuy nhiên sau khi thực hiện, tôi thấy:

Cú pháp đếm ngày chỉ đếm những ngày nghỉ thứ 7, CN và những ngày lễ tết. Điều tôi muốn các anh chị giúp đỡ là nếu những ngày lễ lết mà trùng vào ngày thứ 7, CN thì nó sẽ tự động trừ bù những ngày tương ứng tiếp theo.

VD: ngày lễ 30/4, 01/5, 02/9,..trùng vào ngày T7, CN thì nó sẽ trừ bù vào những ngày thứ 2, thứ 3,...

Mục đích là để tính số ngày nghỉ phép mà nhân viên đã nghỉ (không bao gồm các ngày T7, CN, ngày lễ, và những ngày nghỉ bù trùng ngày lễ).

Chào các anh chị

Mình là thành viên mới và khi đọc bài "cú pháp đếm ngày" mình thấy hay và áp dụng ngay nhưng không được, (mình mới chỉ thử làm, đánh lệnh y như File đính kèm nhưng nó đều báo lỗi #NAME?
Các anh chị giúp mình sử dụng hàm này với

Xin cảm ơn nhiều
 
Hàm tự tạo cho bạn đây, hãy kiểm tra thêm theo file đính kèm

PHP:
Option Explicit
Function SoNgayPhep(FromDate As Date, ToDate As Date, LeTet As Range)
1 Dim Clls As Range
 ReDim DateGov(LeTet.Cells.Count + 1) As Date
3 Dim Jj As Integer, Zz As Integer, ConLai As Integer, Ww As Byte
  
 For Each Clls In LeTet
   Ww = Ww + 1
   DateGov(Ww) = Clls.Value
7 Next Clls
 If FromDate > ToDate Then
   DateGov(0) = FromDate
   FromDate = ToDate:         ToDate = DateGov(0)
11 End If
 
 Zz = ToDate - FromDate
13 For Jj = 0 To Zz
   Select Case Weekday(FromDate + Jj)
   Case 1, 7
   Case Else
17      SoNgayPhep = SoNgayPhep + 1
   End Select
19   For Ww = 1 To 9
      If FromDate + Jj = DateGov(Ww) Then
         ConLai = ToDate - FromDate - Jj
         SoNgayPhep = SoNgayPhep - 1
23         If Weekday(DateGov(Ww)) = 1 Or Weekday(DateGov(Ww)) = 7 Then
                If ConLai < 2 Then Exit Function
            Rem EF
         End If
         Exit For ''
      End If
29   Next Ww
 Next Jj
End Function
 

File đính kèm

  • GPE.rar
    9.2 KB · Đọc: 83
Lần chỉnh sửa cuối:
PHP:
Option Explicit
Function SoNgayPhep(FromDate As Date, ToDate As Date, LeTet As Range)
 Dim Clls As Range
 ReDim DateGov(LeTet.Cells.Count + 1) As Date
 Dim Jj As Integer, Zz As Integer, ConLai As Integer, Ww As Byte
  
 For Each Clls In LeTet
   Ww = Ww + 1
   DateGov(Ww) = Clls.Value
 Next Clls
 If FromDate > ToDate Then
   DateGov(0) = FromDate
   FromDate = ToDate:         ToDate = DateGov(0)
 End If
 
 Zz = ToDate - FromDate
 For Jj = 0 To Zz
   Select Case Weekday(FromDate + Jj)
   Case 1, 7
   Case Else
      SoNgayPhep = SoNgayPhep + 1
   End Select
   For Ww = 1 To 9
      If FromDate + Jj = DateGov(Ww) Then
         ConLai = ToDate - FromDate - Jj
         SoNgayPhep = SoNgayPhep - 1
         If Weekday(DateGov(Ww)) = 1 Or Weekday(DateGov(Ww)) = 7 Then
            If ConLai < 2 Then Exit Function
            Rem EF
         End If
         Exit For ''
      End If
   Next Ww
 Next Jj
End Function

Bác giải thích rõ về code của mình được không, em đọc mà khó hiểu quá?

Mong bác chỉ giáo!
 
Bác Sa ơi, nếu em thay vùng nghỉ lễ là $F$2:$F$8 theo file của Bác thì sẽ báo là Value.
Với lại nhờ Bác luôn. Các ngày 01/01/.., 30/04/.., 01/05/.... năm nào cũng như nhau, Bác làm tiếp luôn nếu Day and month là những ngày trên là ngày lễ. => Chỉ đưa vào list những ngày AL thôi.
Cám ơn Bác.
 
Bác ơi, nếu em thay vùng nghỉ lễ là $F$2:$F$8 theo file của Bác thì sẽ báo là Value.
Hãy nói rõ hơn để mình thấy sai chỗ nào chứ.

nhờ Bác luôn. Các ngày 01/01/.., 30/04/.., 01/05/.... năm nào cũng như nhau, Bác làm tiếp luôn nếu Day and month là những ngày trên là ngày lễ. => Chỉ đưa vào list những ngày AL thôi. Cám ơn Bác.

Lúc đó sẽ là vầy:
PHP:
Option Explicit
Function SoNgayPhep(FromDate As Date, ToDate As Date, LeTet As Range)
 Dim Clls As Range
 ReDim DateGov(10) As Date
 Dim Jj As Integer, Zz As Integer, ConLai As Integer, Ww As Byte
  
 DataGov(1) = DateSerial(Year(Date), 1, 1):              Ww = 2
 For Each Clls In LeTet
   DateGov(Ww) = Clls.Value:                             Ww = Ww + 1
   If Ww > 6 Then Exit For
 Next Clls
 DataGov(7) = DateSerial(Year(Date), 4, 30)
 DataGov(8) = DateSerial(Year(Date), 5, 1)
 DataGov(9) = DateSerial(Year(Date), 9, 2)

 ' . . . . .  '


End Function


Bác giải thích rõ về code của mình được không, em đọc mà khó hiểu quá?

Dòng lệnh từ 1 đến 3: Khai báo các biến cần dùng; Trong đó có biến mảng để chứa các ngày nghỉ lễ hàng năm.

Dòng lệnh từ 4 đến 7 dùng để nạp các ngày nghỉ lễ vô biến mảng nêu trên;

Dòng lệnh 8 đến 11 dùng để khắc phục tính đãng trí hay dỡ hơi của người dùng hàm;

Dòng 12: Xác định số ngày phải tính toán;

Dòng 13- 30: Lập vòng lặp để đếm các ngày nghỉ phép

Dòng 14-18: Đếm tất cả các ngày trong khoảng ngày, trừ thứ bảy & CNhật;

Dòng 19-29: Khảo sát, nếu trong khoảng cần tính phép có các ngày nghỉ thì trừ ra;
 
Hãy nói rõ hơn để mình thấy sai chỗ nào chứ.



Lúc đó sẽ là vầy:
PHP:
Option Explicit
Function SoNgayPhep(FromDate As Date, ToDate As Date, LeTet As Range)
 Dim Clls As Range
 ReDim DateGov(10) As Date
 Dim Jj As Integer, Zz As Integer, ConLai As Integer, Ww As Byte
  
 DataGov(1) = DateSerial(Year(Date), 1, 1):              Ww = 2
 For Each Clls In LeTet
   DateGov(Ww) = Clls.Value:                             Ww = Ww + 1
   If Ww > 6 Then Exit For
 Next Clls
 DataGov(7) = DateSerial(Year(Date), 4, 30)
 DataGov(8) = DateSerial(Year(Date), 5, 1)
 DataGov(9) = DateSerial(Year(Date), 9, 2)

 ' . . . . .  '


End Function


Dòng lệnh từ 1 đến 3: Khai báo các biến cần dùng; Trong đó có biến mảng để chứa các ngày nghỉ lễ hàng năm.

Dòng lệnh từ 4 đến 7 dùng để nạp các ngày nghỉ lễ vô biến mảng nêu trên;

Dòng lệnh 8 đến 11 dùng để khắc phục tính đãng trí hay dỡ hơi của người dùng hàm;

Dòng 12: Xác định số ngày phải tính toán;

Dòng 13- 30: Lập vòng lặp để đếm các ngày nghỉ phép

Dòng 14-18: Đếm tất cả các ngày trong khoảng ngày, trừ thứ bảy & CNhật;

Dòng 19-29: Khảo sát, nếu trong khoảng cần tính phép có các ngày nghỉ thì trừ ra;

Cảm ơn bác,
Bác đưa luôn dòng code mới của bác vào file cụ thể đi,
 
Hãy nói rõ hơn để mình thấy sai chỗ nào chứ.
Tại D2, em nhập
=songayphep(B2,C2,F$2:F$6)
Thì nó báo Value
Chắc là nó sai ở chỗ
PHP:
For Ww = 1 To 9
Em sửa thành
PHP:
For Ww = 1 To LeTet.Cells.Count
Thì nó OK
 
Lần chỉnh sửa cuối:
Mà sao code của bác Sa lạ nhỉ, khi nhập thời gian sau nhỏ hơn thời gian trước nó vẫn cho kết quả mới chết chứ:

VD: Từ ngày 01/02/2009 đến ngày 10/02/2008. Rõ rang nhìn thấy ngay là thời gian nhập không hợp lệ rồi.

Bác xem điều chỉnh lại giúp em với. Nhỡ tay nhập nhầm thì nó vẫn cho kết quả thì nguy.
 
Kết quả đó vẫn đúng mà!

Mà sao code của bác Sa lạ nhỉ, khi nhập thời gian sau nhỏ hơn thời gian trước nó vẫn cho kết quả mới chết chứ:
VD: Từ ngày 01/02/2009 đến ngày 10/02/2008. Rõ rang nhìn thấy ngay là thời gian nhập không hợp lệ rồi.
Bác xem điều chỉnh lại giúp em với. Nhỡ tay nhập nhầm thì nó vẫn cho kết quả thì nguy.


Vậy là bạn chưa thấu đáo câu này của mình rồi:

Dòng lệnh 8 đến 11 dùng để khắc phục tính đãng trí hay dỡ hơi của người dùng hàm;
:-=
 
Bạn dùng thử code sau, nhập vào danh sách ngày lễ theo DL trừ những ngày 01/01, 30/04, 01/05, 02/09, các ngày này đã ghi trong hàm.
UDF này sẽ tính nếu ngày lễ mà là T7 hay CN thì sẽ trừ thêm 1 ngày.
PHP:
Option Explicit
Function NgayPhep(ngay1 As String, ngay2 As String, Letet As Range) As Integer
Dim i As Integer, j As Integer, ThoiGian As Long, solan As Long
Dim ngayCuoi As Date, ngayDau As Date, iNgay As Date
Dim iDay As Byte, iMth As Byte, iLe As Byte
Dim wf As WorksheetFunction
Set wf = WorksheetFunction
Dim SoNgayNghi As Long
'Neu ngay dau < ngay cuoi'
ngayDau = DateSerial(Year(ngay1), Month(ngay1), Day(ngay1))
ngayCuoi = DateSerial(Year(ngay2), Month(ngay2), Day(ngay2))
If ngayDau > ngayCuoi Then
  MsgBox "Ngay khong dung"
  Exit Function
End If
'lay hieu so ngaycuoi-ngaydau'
SoNgayNghi = 0
ThoiGian = ngayCuoi - ngayDau
For i = ThoiGian To 0 Step -1
  iNgay = ngayCuoi - i
  iDay = Day(iNgay)
  iMth = Month(iNgay)
  'xac dinh co phai la ngay le dl: 01/01, 30/04, 01/05, 02/09'
  If (iDay = 1 And iMth = 1) Or (iDay = 30 And iMth = 4) Or _
  (iDay = 1 And iMth = 5) Or (iDay = 2 And iMth = 9) Then iLe = 1
  'if letet khong co'
  If Letet.Rows.Count = 0 Then
    solan = 0
  Else
    solan = wf.CountIf(Letet, iNgay)
  End If
  If solan > 0 Or iLe = 1 Then
    If (Weekday(iNgay) = 1 Or Weekday(iNgay) = 7) Then
      SoNgayNghi = SoNgayNghi + 2
    Else
      SoNgayNghi = SoNgayNghi + 1
    End If
  Else
    If (Weekday(iNgay) = 1 Or Weekday(iNgay) = 7) Then
      SoNgayNghi = SoNgayNghi + 1
    End If
  End If
  iLe = 0
Next i
NgayPhep = ThoiGian - SoNgayNghi + 1
End Function
Bạn test lại nhé, chưa test hết.
 
Yêu cầu của tác giả gần giống với hàm Networkdays của Excel (nhưng hàm này trừ luôn thứ 7)
Tôi để ý thấy các cô thư ký khi tính toán với thời gian thường có 3 nhu cầu như sau:
1> Tính ngày kết thúc sau 1 khoảng thời gian cho trước, tính từ ngày bắt đầu cho trước, trừ CN và các ngày lễ
2> Tính ngày kết thúc sau 1 khoảng thời gian cho trước, tính từ ngày bắt đầu cho trước, không trừ CN va các ngày lễ... chỉ xét duy nhất ngày cuối cùng, nếu trùng CN, lễ, tết thì "dịch đi" sau cho ngày cuối là 1 ngày bình thường (Yêu cầu này thường được dùng để "hẹn lịch làm việc".. vì sợ ngày hẹn rơi vào các ngày nghỉ)
3> Tính số ngày nghì phép từ ngày bắt đầu đến ngày kết thúc là bao nhiêu ngày... cũng trừ CN và nghỉ lễ (cái này giống với hàm NetWorkdays của Excel)

Tôi gữi cho các bạn nguyên 1 bộ hàm bao gồm 3 yêu cầu này (code khá đơn giản)
Yêu cầu 1: Hàm WorkdayVN
PHP:
Function WorkdayVN(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, vbSunday) > 1
    Dk2 = WorksheetFunction.CountIf(Holidays, Startday + i) = 0
    Dk3 = WorksheetFunction.CountIf(Holidays, Format(Startday + i, "mm-dd")) = 0
    If Dk1 And Dk2 And Dk3 Then WorkdayVN = Startday + i: Days = Days - 1
    i = i + 1
  Loop Until Days = 0
End Function

Yêu cầu 2: Hàm GetEndday

PHP:
Function GetEndday(Startday As Date, Days As Long, Optional Holidays As Range, Optional FromFirstDay As Boolean = False) As Date
  Dim i As Long, Dk1 As Boolean, Dk2 As Boolean, Dk3 As Boolean, Temp As Long
  On Error Resume Next
  If Days <= 0 Or IsDate(Startday) = False Then Exit Function
  If Holidays Is Nothing Then Dk2 = True: Dk3 = True
  Temp = Startday + Days + FromFirstDay
  Do
    Dk1 = Weekday(Temp + i, vbSunday) > 1
    Dk2 = WorksheetFunction.CountIf(Holidays, Temp + i) = 0
    Dk3 = WorksheetFunction.CountIf(Holidays, Format(Temp + i, "mm-dd")) = 0
    GetEndday = Temp + i
    i = i + 1
  Loop Until Dk1 And Dk2 And Dk3
End Function

Yêu cầu 3: hàm NetwdsVN

PHP:
Function NetwdsVN(Startday As Date, Endday As Date, Optional Holidays As Range) As Long
  Dim i As Long, Dk1 As Boolean, Dk2 As Boolean, Dk3 As Boolean
  On Error Resume Next
  If Holidays Is Nothing Then Dk2 = True: Dk3 = True
  For i = Startday To Endday
    Dk1 = Weekday(i, vbSunday) > 1
    Dk2 = WorksheetFunction.CountIf(Holidays, i) = 0
    Dk3 = WorksheetFunction.CountIf(Holidays, Format(i, "mm-dd")) = 0
    If Dk1 And Dk2 And Dk3 Then NetwdsVN = NetwdsVN + 1
  Next i
End Function
------------------------
Cú pháp hàm
- Cú pháp cũng bình thường như bao hàm khác, chỉ lưu ý trong hàm cho phép chọn hoặc không chọn trừ lễ... cho phép tính hoặc bỏ qua ngày bắt đầu
- Thông thường để tính Workday thì mặc định ta hay tính luôn ngày bắt đầu nên tôi cho Option FromFirstDay mặc định = True
- Với hàm GetEndday, chuyên dùng để "hẹn việc sau 1 khoảng thời gian" thì người ta thường bỏ qua ngày bắt đầu... Lấy ví dụ tôi nói rằng "Sau 7 ngày nữa anh đến gặp tôi" thì ý tôi muốn nói tuần sau cũng ngày này anh đến gặp tôi ---> Đồng nghĩa không tính ngày hôm nay ---> Vì lẽ đó tôi cho Option FromFirstDay mặc định = False
------------------------
Yêu cầu nhập liệu:
- Nhập đúng định dạng chuẩn do Windows quy định
- Trong vùng chứa ngày lể, nếu là những ngày xảy ra hàng năm thì nhập theo dạng TEXT, với định dang mm-dd ---> Tôi đã thí nghiệm và thấy chỉ có dùng định dạng này mới cho kết quả đúng trên mọi máy tính (định dang dd-mm có thể cho kết quả sai trong 1 số trướng hợp)
Hãy tham khảo file đính kèm và test giúp tôi với
-----------------------
Đáng tiếc tôi chưa có khả năng cải tiến nổi để Option Holidays có thể chọn Range hoặc gõ trực tiếp vào (giống như Excel đã làm với Workday và NetWorkdays)
 

File đính kèm

  • Workday&NetwdsVN.xls
    35 KB · Đọc: 142
Lần chỉnh sửa cuối:
Yêu cầu 1: Hàm WorkdayVN
PHP:
Function WorkdayVN(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, vbSunday) > 1
    Dk2 = WorksheetFunction.CountIf(Holidays, Startday + i) = 0
    Dk3 = WorksheetFunction.CountIf(Holidays, Format(Startday + i, "mm-dd")) = 0
    If Dk1 And Dk2 And Dk3 Then WorkdayVN = Startday + i: Days = Days - 1
    i = i + 1
  Loop Until Days = 0
End Function
Trường hợp muốn hàm của bạn coi Thứ 7 cũng là ngày nghỉ thì sửa code như thế nào ? Tức là giống hàm Add-in WORKDAY của Excel
 
Trường hợp muốn hàm của bạn coi Thứ 7 cũng là ngày nghỉ thì sửa code như thế nào ? Tức là giống hàm Add-in WORKDAY của Excel
Vì chúng ta cần tính luôn ngày thứ 7 nên mới viết thành UDF, chứ như bạn bỏ luôn ngày thứ 7, thôi thì xài hàm WORKDAY của Excel cho rồi ---> Sửa code chi cho mệt?
 
Vì chúng ta cần tính luôn ngày thứ 7 nên mới viết thành UDF, chứ như bạn bỏ luôn ngày thứ 7, thôi thì xài hàm WORKDAY của Excel cho rồi ---> Sửa code chi cho mệt?
Ví dụ khi mình gửi file đó cho người khác mà máy của bạn đó không có cài sẵn Add-in này của Excel hoặc không còn đĩa cài đặt. Mình không biết về VBA chứ sửa mà phức tạp quá thì cũng không nên thiệt+-+-+-+
 
Ví dụ khi mình gửi file đó cho người khác mà máy của bạn đó không có cài sẵn Add-in này của Excel hoặc không còn đĩa cài đặt. Mình không biết về VBA chứ sửa mà phức tạp quá thì cũng không nên thiệt+-+-+-+
Thế thì bạn thử sửa đoạn:
Dk1 = Weekday(Startday + i, vbSunday) > 1
thành:
Dk1 = Weekday(Startday + i, vbMonday) < 5
rồi kiểm tra lại xem
 
Web KT
Back
Top Bottom