Cần giúp đỡ về đếm khoảng thời gian (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

levelpro

Thành viên mới
Tham gia
10/6/08
Bài viết
14
Được thích
2
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
 

File đính kèm

Dạ em cám ơn anh rất nhiều ạ. Mừng quá Có thể đếm được rồi. Mà anh ơi có cách nào khi mình thêm hoặc xóa 1 vài ngày trong khoảng thời gian đó nó tự nhảy cập nhật lại kết quả không ạ. Hiện tại khi thêm hoặc xóa ngày trong khoảng thời gian đó không cập nhật kết quả ạ
 
Bạn dùng công thức sau
Mã:
=SUMPRODUCT((D17:AH76>DATE(2017,6,4))*(D17:AH76<DATE(2017,10,6)))
 
Ừ 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ỉ, 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))
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?
 
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?
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.
 
Dùng công thức chắc chắn là ổn hơn rùi,
 
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í 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?
 
À, 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.
 
À, 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.
Bạn vẫn chẳng hiểu gì cả :)

Thôi để bạn tự ngẫm vậy.

Chúc bạn ngày vui!
 
Đúng thật, chắc m vẫn chưa hiểu ý bạn.
Chúc bạn ngày vui!
 
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
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:
  • 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.
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:
PHP:
=($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)
Ctrl+Shift+Enter

Bạn tham khảo file đính kèm.

Chúc bạn ngày vui.
 

File đính kèm

Lần chỉnh sửa cuối:
Dạ cám ơn các bro pro đã giúp đỡ. Em Học hỏi được rất nhiều và làm được công việc của mình rồi ạ. 19/9 này em sẽ tham gia học lớp VBA để có kiến thức vào đây thảo luận cùng các anh chị. Em chân thành cám ơn
 
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:
  • 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.
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:
PHP:
=($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)
Ctrl+Shift+Enter

Bạn tham khảo file đính kèm.

Chúc bạn ngày vui.
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ạ 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é
Nế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.
 
Lần chỉnh sửa cuối:
Nế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.
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
 
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
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:
  • Nếu ngày bắt đầu và kết thúc nằm 'lọt thỏm' vào 1 trong khoảng các ngày nghỉ trong danh sách liệt kê, thì công thức cũ vẫn ra kết quả ngày (>0) -->như vậy sai, dù rằng chuyện đó khó có thể xảy ra, nhưng đã là tính toán thì phải chính xác.
Do vậy, tôi điều chỉnh lại như công thức dưới đây:
PHP:
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})))))
Ctrl+Shift+Enter, fill xuống.

Bạn tham khảo thêm file đính kèm.

Chúc bạn ngay vui.
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom