Sau một đêm ngủ không được, tôi đã tìm được cách để đưa đơn vị thời gian định mức về mỗi 5 phút. Xin gửi lên bản "version 1.4", đã được hiệu chỉnh. Bảng tính này cũng hoàn toàn dùng công thức và các Name, không dùng cột phụ.
Khi nhập liệu, phải nhập cho đúng quy cách: Thời gian định mức (ô F3) là mỗi 5 phút, và phải chia cho 60, thời gian bắt đầu (ô F4) thì phải đúng dạng dd/mm/yyyy hh:mm, nhập sai nó tính sai ráng chịu! Chính vì cái phiền toái này mà tôi chế thêm cách dùng chuột để điều khiển các Control, đỡ mất công tính nhẩm, nhớ định dạng, mà lại dễ dàng để test các kết quả. Hiện tại các Control này bị giới hạn mức Maximum và Minimum, nếu cảm thấy như vậy là chưa đủ, các bạn chỉ việc thay đổi Properties của nó.
Cũng gần gần giống bạn
rollover79, tất cả các ngày trong tuần, tôi đều đưa về thứ Hai, bằng cách bù trừ một khoảng thời gian hợp lý.
Dựa vào khoảng thời gian định mức đã biết, trước hết tôi tìm ra số tuần lễ sẽ trôi qua, bằng cách chia cho 41.5 (thời gian làm việc của một tuần).
Sau đó tính tiếp số giờ nghỉ buổi trưa (2 tiếng) nếu có.
Rồi tìm tiếp thời gian nghỉ qua đêm (16.5 tiếng) nếu có.
Bởi đã giới hạn thời gian chỉ trong khoảng 41.5 tiếng, nên tôi không cần phải xét đến ngày thứ Bảy. Hễ mốc thời gian chạm mức 41.5 thì nó sẽ nhảy sang thứ Hai kế tiếp.
Sau cùng, tôi lấy thời gian bắt đầu, cộng thêm định mức, cộng thêm các khoảng nghỉ trưa, nghỉ qua đêm, và cộng thêm khoảng thời gian nghỉ (126.5 tiếng) nếu như định mức lớn hơn 1 tuần... Đó chính là kết quả cuối cùng.
Hy vọng bảng tính này sẽ đáp ứng được yêu cầu của bác
Letin.
Giải thuật dùng trong bảng tính này, nếu so với các UserDefineName thì không đáng, bởi nó dài dòng... Tuy nhiên, nói cho vui, các bác có thể dùng nó để test các UDF... Hôm qua, tôi đã dùng bảng tính này để test code của bạn
rollover79, nhờ đó mới khám phá cái lỗi đã nói cho bạn ở trên.
Lỗi nhảy sớm khi chạm mức 41.5 này, tôi cũng đã mắc phải. Cách xử lý của tôi hơi củ chuối tí... Tôi cộng thêm một khoảng thời gian tối thiểu (ở đây là 5 phút) vào tổng thời gian trước khi đem chia cho 41.5, như thế, nếu như thời gian định mức bằng đúng 41.5, kết quả sẽ không bị nhảy sớm. Tôi chỉ tính nhẩm thôi, ví dụ bắt đầu làm lúc 7:30 ngày thứ Hai, với định mức bằng 41.5 tiếng, bằng đúng thời gian làm của 1 tuần, thì kết quả phải là lúc 11:30 ngày thứ Bảy... (chưa đủ để nhảy sang 1 tuần mới, mặc dù 41.5/41.5 là 1)