Code của bạn cần xem lại 1 số điểm như:Ừ nhỉ, không cần dùng code đâu dùng công thức luôn cũng đc, =SUMPRODUCT((D17:AH76>=I22)*(D17:AH76<=I26))
Nhập ngày tháng vào vùng khác thì chắc chắn tính sai rồi, nhập không đúng thứ tự ngày tháng vẫn đúng mà bạn.Code của bạn cần xem lại 1 số điểm như:
- Nếu người dùng thay đổi vùng nhập ngày tháng thì sao?
- Nếu người dùng nhập không đúng thứ tự ngày tháng thì như thế nào?
Ví dụ như nếu bạn í mà nhập tại H22 là ngày 07/06/2017 thì kết quả như thế nào bạn?Nhập ngày tháng vào vùng khác thì chắc chắn tính sai rồi, nhập không đúng thứ tự ngày tháng vẫn đúng mà bạn.
Nếu trong file này chắc vẫn đáp ứng đc yc của bạn chủ thớt.
Vẫn ra 35 thôi bạn, vì mình đặt giá trị của ô khác "" thì + 1 ngày mà bạn.Ví dụ như nếu bạn í mà nhập tại H22 là ngày 07/06/2017 thì kết quả như thế nào bạn?
Bài #8 nếu bạn cho rằng công thức ổn hơn thì với giả dụ tại #9 thì kết quả hàm tự tạo của bạn đang sai khác với hàm tại #4.Dùng công thức chắc chắn là ổn hơn rùi,
Bạn vẫn chẳng hiểu gì cảÀ, m hiểu rùi ý bạn rùi, là nhập ngày thay vì ô I22 ở công thức phải không.
Nãy giờ m nghĩ bạn nói phần code VBA.
Trong phạn vi file bạn chủ thớt gửi m thấy để I22 thay cho ngày cũng đc, và mình thay < bằng =< để giống với cách tính cho ra đúng 35 ngày.
Thấy bạn chịu khó làm bảng lịch ngày nghỉ qua các năm rất cực khổ, nên tôi có gợi ý sau:Em muốn đếm số ngày làm việc trong hai khoảng thời gian. Nhưng trong khoảng thời gian đó có một số ngày nghỉ liên tục. Em không biết phải làm thế nào. Mong các bác giúp đỡ trong file đính kèm
=($D2-$C2+1-SUM((CHOOSE({1,2},IF(($A$2:$A$10<=$C2)*($A$2:$A$10>0),$C2,$A$2:$A$10),IF(($B$2:$B$10>=$D2),$D2,$B$2:$B$10))*{-1,1}+{0,1})*SIGN(MMULT(N(IFERROR(MATCH($A$2:$B$10,$C2:$D2,1),0)=1),{1;1}))))*(SUM($C2:$D2)>0)
Dạ em cám ơn anh. Em đang áp dụng cách của anh để hoàn thiện file kế hoạch công trường em. Lần sau xin phép anh lại được anh chỉ bảo nữa nhéThấy bạn chịu khó làm bảng lịch ngày nghỉ qua các năm rất cực khổ, nên tôi có gợi ý sau:
Nếu bạn thấy gợi ý trên phù hợp với công việc và đỡ cực hơn cho bạn, thì dùng công thức mảng:
- Chỉ cần tạo bảng vắn tắt hơn chỉ lưu những ngày nghỉ: bắt đầu từ ngày nào, cho đến ngày nào trong năm, hoặc trong nhiều năm.
- Căn cứ những ngày nghỉ đó khi xét dữ liệu ngày làm việc đầu cuối, bạn chỉ cần trừ trong danh sách đã kê những ngày nghỉ sẽ ra số ngày làm việc như yêu cầu.
Ctrl+Shift+EnterPHP:=($D2-$C2+1-SUM((CHOOSE({1,2},IF(($A$2:$A$10<=$C2)*($A$2:$A$10>0),$C2,$A$2:$A$10),IF(($B$2:$B$10>=$D2),$D2,$B$2:$B$10))*{-1,1}+{0,1})*SIGN(MMULT(N(IFERROR(MATCH($A$2:$B$10,$C2:$D2,1),0)=1),{1;1}))))*(SUM($C2:$D2)>0)
Bạn tham khảo file đính kèm.
Chúc bạn ngày vui.
Nếu gợi ý của tôi giúp được cho bạn ít nhiều, tôi cũng vui lây!Dạ em cám ơn anh. Em đang áp dụng cách của anh để hoàn thiện file kế hoạch công trường em. Lần sau xin phép anh lại được anh chỉ bảo nữa nhé
Dạ gợi ý của anh rất gọn và chuẩn. nó còn giúp em áp dụng trực tiếp vào sheet Tiến độ luôn. Em cám ơn nhiều aNếu gợi ý của tôi giúp được cho bạn ít nhiều, tôi cũng vui lây!
Nói thêm, các năm có 2 số đuôi nào chia chẳn cho 4 là năm nhuận nên phải có ngày 29/02 năm đó, Ví dụ: Năm 2020 phải có ngày 29/02/2020, cho nên nếu bạn chỉ cần vô ý quên nhập ngày đó vào bảng thì công thức Sumproduct('theo LICH') sẽ cộng lại đúng, nhưng thiếu mất 1 ngày là lỗi tại bạn.
Với gợi ý của tôi, thì bạn không cần chú ý chuyện đó nữa, khỏe không!?
Chúc bạn ngày vui.
Tôi có kiểm tra lại các trường hợp có thể phát sinh trong lúc nhập dữ liệu, phát hiện tôi xét thiếu 1 trường hợp hy hữu:Dạ gợi ý của anh rất gọn và chuẩn. nó còn giúp em áp dụng trực tiếp vào sheet Tiến độ luôn. Em cám ơn nhiều a
E2=IF(MAX(($A$2:$A$10<=$C2)*($B$2:$B$10>=$D2))+($C2*$D2=0),0,($D2-$C2+1-SUM((IF(($B$2:$B$10>=$D2),$D2,$B$2:$B$10)-IF(($A$2:$A$10<=$C2)*($A$2:$A$10>0),$C2,$A$2:$A$10)+1)*SIGN(MMULT(N(IFERROR(MATCH($A$2:$B$10,$C2:$D2,1),0)=1),{1;1})))))