vanthinh3101
Thành viên tích cực


- Tham gia
- 24/1/15
- Bài viết
- 1,125
- Được thích
- 1,481
- Giới tính
- Nam
- Nghề nghiệp
- Finance
Sau khi nghiền ngẫm, em đã tư duy ngược 1 chút anh ạ.Bây giờ là sáng sớm Chủ nhật bên đó, tuần này thì tôi hết ngồi không, vã lại thời gian mấy ngày nay chắc các bạn cũng đã nghiền ngẫm, trăn trở với nó rồi, nên cũng là lúc tôi cũng phải đưa ra cách xử lý của mình. Tôi sẽ dùng cách đại trà để ai cũng dễ nắm bắt vấn đề.
Các bạn cũng sẽ như tôi lúng túng trong việc làm sao xác định được số ngày cộng thêm mà không bị rơi vào ngày CN và lễ, thấy rắc rối nhưng không phải vậy, và giống như tôi gợi ý với bạn @vanthinh3101 ở bài #12
Vd: Ngày bắt đầu còn 1.5 tiếng, thời gian thực hiện cần 20 tiếng, vậy thời gian còn lại là = 20 - 1.5 = 18.5 tiếng. Vì 1 ngày làm việc cố định 8 tiếng, vậy cần 3 ngày cộng thêm (8*3=24 tiếng -> bội số của 8) để thực hiện kết thúc, trong đó 2 ngày đầu mất 16 tiếng, vậy giờ kết thúc là 2.5 tiếng. Ngày kết thúc bắt đầu từ lúc 8h00 + 2.5 tiếng = 10h30 là mốc giờ kết thúc.
Muốn tìm bội số của 8 thì tôi dùng hàm Ceiling( 'Thời gian còn lại' /8 ,1). Vậy, đặt bội số này vào hàm:
=WORKDAY.INTL( 'Ngày bắt đầu', 'bội số của 8', 11, 'Ngày CN/ lễ' ) thì tìm được ngày cần thêm để kết thúc công việc mà không rơi vào CN và ngày lễ.
Tôi thực hiện cả hai phiên bản trước và từ 365 để các bạn trước 365 có thể tham khảo:
1/ Công thức trước 365:
a. Ngày giờ điều chỉnh:
b.Ngày giờ kết thúc:Mã:=WORKDAY.INTL(B6,N(MOD(B6,1)*24>=17),11,$J$6:$J$12)+IF(MOD(B6,1)*24<17,TEXT(MAX(MOD(B6,1)*24,8),"[<12];[>13];13"),8)/24
Mã:=WORKDAY.INTL(D6,CEILING((C6-(17-ROUND(MOD(D6,1)*24,6)-(ROUND(MOD(D6,1)*24,6)<13)))/8,1),11,$J$6:$J$12)+IF(MOD(C6-(17-ROUND(MOD(D6,1)*24,6)-(ROUND(MOD(D6,1)*24,6)<13)),8),8+MOD(C6-(17-ROUND(MOD(D6,1)*24,6)-(ROUND(MOD(D6,1)*24,6)<13)),8)+(MOD(C6-(17-ROUND(MOD(D6,1)*24,6)-(ROUND(MOD(D6,1)*24,6)<13)),8)>4),17)/24
2/ Công thức 365:
a. Ngày giờ điều chỉnh:
b.Ngày giờ kết thúc:Mã:=LET(gio,MOD(B6,1)*24,WORKDAY.INTL(B6,N(gio>=17),11,$J$6:$J$12)+IF(gio<17,TEXT(MAX(gio,8),"[<12];[>13];13"),8)/24)
Mã:=LET(Gcl,LET(gio,ROUND(MOD(D6,1)*24,6),C6-16+gio-(gio>12)),Glt,CEILING(Gcl/8,1),Gdc,Gcl-Glt*8,WORKDAY.INTL(D6,Glt,11,$J$6:$J$12)+(16+Gdc+(8+Gdc>4))/24)
Các bạn xem đồ biểu, thuật toán tôi có nêu trong file kèm
Chúc các bạn ngày vui
![]()
Nếu anh lấy 17h của Ngày bắt đầu làm mốc thì em sẽ tìm cách lấy 8h Ngày bắt đầu làm mốc.
Sau khi "vái tứ phương" bao gồm cả người và AI đã ra được 1 công thức mới:
Mã:
E2=WORKDAY.INTL(D6,INT((MOD(D6,1)*24-8+C6)/8),11,$J$6:$J$10)+8/24+MOD(MOD(D6,1)*24-8+C6,8)/24+N(MOD(MOD(D6,1)*24-8+C6,8)>4)/24
Fill xuống
Em cũng học anh phân tích ra như sau:
- MOD(D6,1)*24-8+C6 --> Công thức tính ra số giờ đã sử dụng của Ngày bắt đầu và Thời hạn thực hiện.
- Sử dụng INT(.../8) --> tính ra phần nguyên để đưa vào tham số days trong Workday.Intl
- Workday.Intl(...) --> trả về kết quả là ngày làm việc tiếp theo, với mốc là 0h --> chính vì thế phải cộng thêm 8/24 để được thời gian bắt đầu là 8h
- MOD(....,8)/24 --> tính ra phần dư sau khi chia cho 8 để cộng thêm.
- N(MOD(...,8)>4)/24 --> phần dư mà lớn hơn 4h --> thời gian thực hiện sẽ vượt quá 12h -->phải cộng thêm 1h nghỉ trưa
Hại não thật anh ạ
