Tính thời gian nghỉ của sản phẩm

Liên hệ QC

binhnguyenthanh

Thành viên chính thức
Tham gia
18/8/09
Bài viết
79
Được thích
9
Em có file excel gồm cột thời gian bắt đầu sản xuất và thời gian kết thúc. Em muốn viết code VBA tính được thời gian chết (tức là thời gian không sản xuất) dựa vào 2 giá trị này và điền giá trị vào cột "Thời gian nghỉ" biết rằng ở công ty có 2 ca làm việc và mỗi ca đều có khoảng thời gian nghỉ giải lao như diễn giải trong file đính kèm. Vì có nhiều trường hợp quá nên em chưa tìm ra cách tính cho hợp lý. Mong được mọi người giúp đỡ.
Em xin cảm ơn!
 

File đính kèm

  • Time_working.xlsx
    10.2 KB · Đọc: 15
Có phải bạn định làm như sau: ví dụ dòng đầu tiên của bảng
Bắt đầu | Kết thúc | ca | Thời gian nghỉ
27/09/2017 19:26 | 28/09/2017 1:41 | 12 | xxx |
ta phải tính xxx bằng cách:
từ bắt đầu 27/09/2017 19:26
đến kết thúc 28/09/2017 1:41
có bao nhiêu khoảng thời gian nghỉ và xxx = tổng thời gian nghỉ đó.

Có thể bạn nên tính thử thủ công 1 vài dòng
 
Theo bạn
Ca 1 từ 8h sáng đến 19h59
Ca 2 từ 20h đến 7h59 hôm sau
Ca 12: từ ca ngày sang ca đêm
Ca 21: từ ca đêm sang ca ngày

Theo tôi, khái niệm ca là vô nghĩa vì giờ bắt đầu và kết thúc của các máy không tuân theo giờ của ca. Có đúng không???
 
Theo tôi, khái niệm ca là vô nghĩa vì giờ bắt đầu và kết thúc của các máy không tuân theo giờ của ca. Có đúng không???
Vâng đúng như thế. Em lấy giá trị Ca 12 hoặc ca 21 với hi vọng là dễ tính hơn thôi nhưng đúng như bác nói nó vô nghĩa trong trường hợp này vì máy chạy liên tục 24/24.
 
Vâng đúng như thế. Em lấy giá trị Ca 12 hoặc ca 21 với hi vọng là dễ tính hơn thôi nhưng đúng như bác nói nó vô nghĩa trong trường hợp này vì máy chạy liên tục 24/24.
Bạn yêu cầu tôi theo link: http://www.giaiphapexcel.com/dienda...tính-toán-2-mốc-thời-gian.131208/#post-826886

Nhưng tôi thấy đã có anh @haonlh đang chăm sóc hỗ trợ bạn, chứ không như bạn ghi "chưa có ai".

Bài này tính thời gian nghỉ giữa ca khác hoàn toàn với việc tính thời gian làm việc trừ giờ nghỉ giữa ca, vã lại khoảng giờ nghỉ 11:00-13:00 và 23:20-0:50 ngay cả bạn cũng không biết rõ, thì không thể tính chính xác được.

Tôi gợi ý trước cho bạn giải pháp chung, còn khoảng giờ nghỉ không xác định như nói trên thì tự bạn xử lý, giải pháp này chỉ tính cho thời gian thực hiện trong vòng 24h. Các việc khác ngoài yêu cầu bạn nêu lúc đầu như nhiều ngày hơn, hoặc đã phân định rõ hơn thời gian chưa xác định rõ như trên, bạn cứ tìm hiểu công thức rồi tự phát triển thêm.

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

Chúc bạn ngày vui.
 

File đính kèm

  • Time_working.xlsx
    16.1 KB · Đọc: 22
Bài này tính thời gian nghỉ giữa ca khác hoàn toàn với việc tính thời gian làm việc trừ giờ nghỉ giữa ca, vã lại khoảng giờ nghỉ 11:00-13:00 và 23:20-0:50 ngay cả bạn cũng không biết rõ, thì không thể tính chính xác được.
Em cố gắng tìm kiếm trong các bài viết trên diễn đàn xem có bài viết nào có thể có nội dung như yêu cầu của mình không. Em thấy bài toán của em ngược so với bài toán bác đã giải quyết nên mới hỏi thêm. Em cũng học được nhiều từ cách làm trong file của bác. Mục tiêu của em là muốn có một macro để tính nhưng dựa vào cách tính như trong của bác thì em làm macro không nổi.

[QUOTE="Theo tôi, khái niệm ca là vô nghĩa vì giờ bắt đầu và kết thúc của các máy không tuân theo giờ của ca. Có đúng không???[/QUOTE]

có vẻ như bác @haonlh đã có ý tưởng rồi phải không ạ?
 
Tôi gợi ý trước cho bạn giải pháp chung, còn khoảng giờ nghỉ không xác định như nói trên thì tự bạn xử lý, giải pháp này chỉ tính cho thời gian thực hiện trong vòng 24h. Các việc khác ngoài yêu cầu bạn nêu lúc đầu như nhiều ngày hơn, hoặc đã phân định rõ hơn thời gian chưa xác định rõ như trên, bạn cứ tìm hiểu công thức rồi tự phát triển thêm.
Em test thử kết quả thì thấy việc lấy giá trị trung bình không chính xác. Nếu coi các thời điểm nghỉ giải lao là các phần tử của một mảng A, một mảng B khác lưu các giá trị thời gian nghỉ tương ứng với mảng A thì có cách nào xác định được khoảng thời gian sản xuất nằm giữa 2 giá trị nào của mảng A rồi dựa vào giá trị bảng B tìm ra tổng thời gian nghỉ?
A: 10:00; 11:00; 15:00; 17:00...
B: 10p; 40p; 10p; 30p ... (phút)
Nếu bắt đầu lúc 10:15 và kết thúc lúc 14h:20 thì tương ứng thời gian nghỉ là 10p + 40 P = 50P
Nếu bắt đầu lúc 10:15 và kết thúc lúc 17h:20 thì tương ứng thời gian nghỉ là 10p + 40 P + 10P + 30P= 90P.
 
Lần chỉnh sửa cuối:
Em test thử kết quả thì thấy việc lấy giá trị trung bình không chính xác. Nếu coi các thời điểm nghỉ giải lao là các phần tử của một mảng A, một mảng B khác lưu các giá trị thời gian nghỉ tương ứng với mảng A thì có cách nào xác định được khoảng thời gian sản xuất nằm giữa 2 giá trị nào của mảng A rồi dựa vào giá trị bảng B tìm ra tổng thời gian nghỉ?
A: 10:00; 11:00; 15:00; 17:00...
B: 10p; 40p; 10p; 30p ... (phút)
Nếu bắt đầu lúc 10:15 và kết thúc lúc 14h:20 thì tương ứng thời gian nghỉ là 10p + 40 P = 50P
Nếu bắt đầu lúc 10:15 và kết thúc lúc 17h:20 thì tương ứng thời gian nghỉ là 10p + 40 P + 10P + 30P= 90P.
Vậy là bạn vẫn chưa hiểu tường tận hàm MEDIAN(). Chức năng của nó là lấy số "Trung Vị", chứ không phải là lấy số "Trung bình" như bạn đã hiểu nhầm.
  • Ví dụ 1: =MEDIAN(1, 15, 3) sẽ ra 3 tức là nó đem ba số sắp thứ tự: 1->3->15 thì 3 là số ở vào khoảng giữa (=>Trung vị) của mốc đầu 1, và mốc cuối 15.
  • Ví dụ 2: =MEDIAN(1, 15, 3, 4) sẽ ra 3.5 tức là nó đem bốn số sắp thứ tự: 1->3->4->15 thì 3 và 4 là số ở vào khoảng giữa (=>Trung vị) của mốc đầu 1, và mốc cuối 15, nhưng do vẫn chưa có giá trị trung vị nên nó lấy giá trị trung vị giữa 3 và 4 là 3.5.
  • Từ 2 ví dụ trên ta rút ra kết luận: Nếu số phần tử chứa trong hàm Median() là lẻ, thì số trong khoảng giữa số của 2 phần tử nhỏ và lớn nhất là số trung vị; Nếu số phần tử là chẳn, thì số trung vị chính là số trung bình giữa 2 phần trong cùng. Ví dụ:
    • =MEDIAN(1,2,3,4,10500) sẽ bằng 3;
    • =MEDIAN(1,2,3,4,5,6,7,10500) sẽ bằng 4.5
Từ các ví dụ trên, bạn sẽ hiểu việc áp dụng tính khoảng thời gian thực hiện so với 2 mốc giờ quy định là rất chính xác.
Ví dụ: Giờ bắt đầu 11:50, kết thúc: 21:47 so với mốc giờ nghỉ là từ 11:00 đến 13:00. Nó thực hiện như sau:
  1. So mốc giờ kết thúc với khoảng giờ quy định =MEDIAN( 21:47, 11:00, 13:00 ) chắc chắn nó ra 13:00 là số "Trung vị"
  2. So mốc giờ bắt đầu với khoảng giờ quy định =MEDIAN( 11:50, 11:00, 13:00 ) chắc chắn nó ra 11:50 là số "Trung vị"
  3. Lấy 2 "Trung vị" trừ nhau ta có: 13:00 - 11:50 = 1:10, tức trong khoảng giờ nghỉ từ 11:00 đến 13:00 (giả sử quy định là 2 tiếng nghỉ), thì thực tế do giờ bắt đầu vào muộn hơn 50' so với mốc bắt đầu giờ nghỉ (11:00) nên thời gian nghỉ thực tế chỉ có 1:10' chứ không phải là 2:00.
Từ những việc tính toán trên, bạn có thể tự mình suy luận việc đề nghị làm thành hai Mảng A&B có phù hợp và chính xác hay không!?

Chúc bạn ngày vui.
 
Vậy là bạn vẫn chưa hiểu tường tận hàm MEDIAN(). Chức năng của nó là lấy số "Trung Vị", chứ không phải là lấy số "Trung bình" như bạn đã hiểu nhầm.
Qua phân tích của bác em đã hiểu hàm MEDIAN(). Như vậy nếu khoảng thời gian từ 11h đến 13h được chia thành các khoảng thời gian 40 phút (11h-11h39; 11h40 - 12h 19; 12h20 - 13h) thì sẽ đáp ứng được yêu cầu của em.
Vấn đề bây giờ chỉ là áp dụng hàm Median() và chuyển thành code VBA nữa thôi.
Thanks bác rất nhiều.
 
Tôi gợi ý trước cho bạn giải pháp chung, còn khoảng giờ nghỉ không xác định như nói trên thì tự bạn xử lý, giải pháp này chỉ tính cho thời gian thực hiện trong vòng 24h. Các việc khác ngoài yêu cầu bạn nêu lúc đầu như nhiều ngày hơn, hoặc đã phân định rõ hơn thời gian chưa xác định rõ như trên, bạn cứ tìm hiểu công thức rồi tự phát triển thêm.
Hiện nay dữ liệu của em có cả dữ liệu xuyên 2 đến 3 ngày. Em nghĩ mãi chưa ra được cách nào cho đúng. Nhờ bác giúp đỡ.
 
Web KT
Back
Top Bottom