Chia kế hoạch theo mã dựa vào số lượng đơn hàng và năng lực (2 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

phammaihuong90

Thành viên mới
Tham gia
2/12/10
Bài viết
29
Được thích
6
Xin chào cả nhà GPE,

Em có dữ liệu tương tự file đính kèm. Mục tiêu là chia kế hoạch theo kỳ và mã ưu tiên ( theo thứ tự ưu tiên 1 ~ 11).

Mong muốn mục tiêu kế hoạch sẽ chia theo từng ngày với số lượng đơn hàng (Kỳ 1: cột E, Kỳ 2: cột F), năng lực: Hàng 4.

Nhờ mọi người chỉ giúp em có viết được không ạ với nhiều điều kiện như trên ( cách đây mấy năm e có đọc 1 post bác nào trên diễn đàn dùng công thức excel, rất gọn nhẹ hiệu quả mà giờ tìm post mãi không thấy, post liên quan đến định mức kế hoạch, không tìm được cứ tiếc mãi ...) . Em cảm ơn ace rất nhiều.
 

File đính kèm

1) Nếu làm công thức:
- Côt thứ tự phải SORT (1-11) công thức mới nhẹ
- Nếu nhiều dòng sẽ nặng máy
2) Nếu dùng VBA (module - dùng nút bấm để chạy code)
- Tốc độ nhanh
- Không tự động cập nhật phải "run code" thủ công (tạo nút bấm hoặc vào cửa sổ VBA để chạy)
3) Nếu dùng VBA (UDF hàm tự tạo: ví dụ: hàm tinh toan(các tham số) sẽ phải copy paste như hàm Excel bình thường)

Bạn có đưa ra thông tin "năng lực: hàng 4" hình như bạn nhầm, có phải là hàng 3 với con số 432 (maximum cap mỗi ngày) ?
Bạn cần mình giúp theo phương án nào?
 
Upvote 0
1) Nếu làm công thức:
- Côt thứ tự phải SORT (1-11) công thức mới nhẹ
- Nếu nhiều dòng sẽ nặng máy
2) Nếu dùng VBA (module - dùng nút bấm để chạy code)
- Tốc độ nhanh
- Không tự động cập nhật phải "run code" thủ công (tạo nút bấm hoặc vào cửa sổ VBA để chạy)
3) Nếu dùng VBA (UDF hàm tự tạo: ví dụ: hàm tinh toan(các tham số) sẽ phải copy paste như hàm Excel bình thường)

Bạn có đưa ra thông tin "năng lực: hàng 4" hình như bạn nhầm, có phải là hàng 3 với con số 432 (maximum cap mỗi ngày) ?
Bạn cần mình giúp theo phương án nào?
Cảm ơn bác đã phản hồi. Xin lỗi e đã nhầm, hàng 3 là hàng max năng lực có thể làm được 1 ngày. Em cần giúp theo phương án 2 ạ.
 
Upvote 0
hàng 3 là hàng max năng lực có thể làm được 1 ngày. Em cần giúp theo phương án 2 ạ.
Thứ 2, max là 432, nhưng kết quả mẫu trong file là 433, bạn có thể giải thích về kết quả này không?
...

1) Nếu làm công thức:
- Côt thứ tự phải SORT (1-11) công thức mới nhẹ
Tôi cũng nghĩ là cần phải sort cột thứ tự dù dùng công thức hay vba.
 
Upvote 0
Kỳ 1 và kỳ 2, mỗi kỳ là 14 ngày không thay đổi đúng không bạn?
Tôi cũng nghĩ là cần phải sort cột thứ tự dù dùng công thức hay vba.
mình sort trong code, sau khi xử lý xong sẽ trả lại thứ tự ban đầu thôi.
 
Upvote 0
Thứ 2, max là 432, nhưng kết quả mẫu trong file là 433, bạn có thể giải thích về kết quả này không?
...


Tôi cũng nghĩ là cần phải sort cột thứ tự dù dùng công thức hay vba.
e gộp mã đầu tiên chứ ko tách 1 pc sang cột bên cạnh, công thức có thể không được linh hoạt như thế nên cứ chia xong thì chỉnh sửa tay cũng được ạ
Bài đã được tự động gộp:

Kỳ 1 và kỳ 2, mỗi kỳ là 14 ngày không thay đổi đúng không bạn?

mình sort trong code, sau khi xử lý xong sẽ trả lại thứ tự ban đầu thôi.
Có thể thay đổi nhưng ngày sẽ không quan trọng bằng số lượng cần làm mỗi kỳ ạ. thường tính toán 1 kỳ sẽ phải làm đủ số lượng đó.
 
Upvote 0
Có thể thay đổi nhưng ngày sẽ không quan trọng bằng số lượng cần làm mỗi kỳ ạ. thường tính toán 1 kỳ sẽ phải làm đủ số lượng đó.
Ý mình là số cột mình cố định là đến cột AM như trong file đúng không? Nghĩa là 2 kỳ, kỳ 1 từ K:X, kỳ 2 từ Y đến AL?
 
Upvote 0
Ý mình là số cột mình cố định là đến cột AM như trong file đúng không? Nghĩa là 2 kỳ, kỳ 1 từ K:X, kỳ 2 từ Y đến AL?
vâng đúng rồi bác ạ
Bài đã được tự động gộp:

Ý mình là số cột mình cố định là đến cột AM như trong file đúng không? Nghĩa là 2 kỳ, kỳ 1 từ K:X, kỳ 2 từ Y đến AL?
Xin lỗi vì e nghỉ trưa trả lời muộn, nhờ bác giúp
 
Upvote 0
Bạn thử code này. Nếu chưa đúng thì bạn highlight chỗ sai và chỉ ra kết quả muốn có rồi gửi file lại.
Mã:
Option Explicit
Sub phanbo()
Dim lr&, lc&, i&, j&, nl&, cl&, c&, num&
Dim rng, res()
Sheets("sheet1").Activate ' chon ten sheet ban dang lam viec
lr = Range("C6").End(xlDown).Row ' dong cuoi cua cot thu tu
lc = Range("K5").End(xlToRight).Column + 1 ' cot cuoi AM, them 1 cot chua so thu tu ban dau de sort
Range(Cells(6, lc), Cells(lr, lc)).Value = Evaluate("=ROW(6:" & lr & ")") ' luu STT ban dau vao cot phu
Range("B6", Cells(lr, lc)).Sort Range("C5") ' sort theo thu tu uu tien tai cot C
rng = Range("E6:F" & lr).Value ' gia tri ban dau cua ki 1 và ki 2
ReDim res(1 To UBound(rng), 1 To 28) ' mang ket qua
For j = 1 To UBound(res, 2) ' duyet qua tung cot
    c = IIf(j <= 14, 1, 2): nl = Cells(3, 10 + j).Value ' =432
    For i = 1 To UBound(res) ' duyet tung dong
        cl = rng(i, c)
        num = WorksheetFunction.Min(cl, nl) ' chon gia tri nho hon giua ki va nang luc
        If num > 0 Then
            res(i, j) = num
            nl = nl - num
            rng(i, c) = rng(i, c) - num
            If nl = 0 Then Exit For
        End If
    Next
Next
Range("K6:AL" & lr).ClearContents ' xoa du lieu truoc do
Range("K6").Resize(UBound(res), UBound(res, 2)).Value = res ' dan ket qua vao bang tinh
Range("B6", Cells(lr, lc)).Sort Range("AM5") ' phuc hoi thu tu ban dau
Columns("AM").ClearContents ' xoa cot phu
End Sub
 

File đính kèm

Upvote 0
Bạn thử code này. Nếu chưa đúng thì bạn highlight chỗ sai và chỉ ra kết quả muốn có rồi gửi file lại.
Mã:
Option Explicit
Sub phanbo()
Dim lr&, lc&, i&, j&, nl&, cl&, c&, num&
Dim rng, res()
Sheets("sheet1").Activate ' chon ten sheet ban dang lam viec
lr = Range("C6").End(xlDown).Row ' dong cuoi cua cot thu tu
lc = Range("K5").End(xlToRight).Column + 1 ' cot cuoi AM, them 1 cot chua so thu tu ban dau de sort
Range(Cells(6, lc), Cells(lr, lc)).Value = Evaluate("=ROW(6:" & lr & ")") ' luu STT ban dau vao cot phu
Range("B6", Cells(lr, lc)).Sort Range("C5") ' sort theo thu tu uu tien tai cot C
rng = Range("E6:F" & lr).Value ' gia tri ban dau cua ki 1 và ki 2
ReDim res(1 To UBound(rng), 1 To 28) ' mang ket qua
For j = 1 To UBound(res, 2) ' duyet qua tung cot
    c = IIf(j <= 14, 1, 2): nl = Cells(3, 10 + j).Value ' =432
    For i = 1 To UBound(res) ' duyet tung dong
        cl = rng(i, c)
        num = WorksheetFunction.Min(cl, nl) ' chon gia tri nho hon giua ki va nang luc
        If num > 0 Then
            res(i, j) = num
            nl = nl - num
            rng(i, c) = rng(i, c) - num
            If nl = 0 Then Exit For
        End If
    Next
Next
Range("K6:AL" & lr).ClearContents ' xoa du lieu truoc do
Range("K6").Resize(UBound(res), UBound(res, 2)).Value = res ' dan ket qua vao bang tinh
Range("B6", Cells(lr, lc)).Sort Range("AM5") ' phuc hoi thu tu ban dau
Columns("AM").ClearContents ' xoa cot phu
End Sub
Cảm ơn em đã test, code nhanh và hiệu quả. Nhưng ví dụ nếu kỳ mình cố định nhưng không sản xuất hết năng lực như ngày 18,19/6 thì có thể dồn đơn hàng kỳ 2 làm luôn được không? Hay phải làm điều kiện khác ?
 
Upvote 0
Cảm ơn em đã test, code nhanh và hiệu quả. Nhưng ví dụ nếu kỳ mình cố định nhưng không sản xuất hết năng lực như ngày 18,19/6 thì có thể dồn đơn hàng kỳ 2 làm luôn được không? Hay phải làm điều kiện khác ?
Được chứ, cho ví dụ cụ thể nhé.
 
Upvote 0

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom