Xin giúp đỡ code tính nguyên vật liệu sử dụng qua doanh số hàng bán

Liên hệ QC

LYSM

Thành viên thường trực
Tham gia
16/3/11
Bài viết
290
Được thích
26
Em chào các anh chị!
Em có 1 file nhờ các anh chị giúp đỡ như sau:
Trong file có 1 sheet chứa công thức pha chế đồ uống và 1 sheet số lượng các loại đồ uống đã bán ra, nguyên vật liệu cần tính sẽ dựa vào số lượng các loại đồ uống * số lượng nguyên liệu của từng đồ uống rồi tổng hợp lại những loại trùng nhau. Qua đó có số liệu để so sánh với số liệu thực tế xem phần trăm hao hụt đang ở mức nào?
Em cám ơn, chúc các anh chị cuối tuần vui vẻ.
 

File đính kèm

  • Tinh NVL.xlsx
    21.8 KB · Đọc: 24
Bạn thử code này xem nó báo bao nhiêu giây nhé, so với code cũ nhanh hơn nhiều hay ít. (Bạn cần thêm mấy chỗ màu đỏ đậm bên dưới vào code cũ để báo thời gian chạy)
Rich (BB code):
Sub TinhNVL_Faster()
    Dim aCT, aDS, aRsl, dic As Object
    Dim i&, j&, k&, dKey$, tmr
    tmr = Timer()
   
    aCT = Sheets("CT").Range("B7:F" & Sheets("CT").Range("B" & Rows.Count).End(xlUp).Row)
    aDS = Sheets("DM").Range("C6:E" & Sheets("DM").Range("C" & Rows.Count).End(xlUp).Row)
    ReDim aRsl(1 To UBound(aCT), 1 To 5)
    Set dic = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(aDS)
        For j = 1 To UBound(aCT)
            If aDS(i, 1) = aCT(j, 1) Then
                Do
                    dKey = aCT(j, 3)
                    If Not IsEmpty(dKey) And Not dic.exists(dKey) Then
                        k = k + 1
                        dic.Add dKey, k
                        aRsl(k, 1) = k
                        aRsl(k, 2) = dKey
                        aRsl(k, 3) = aCT(j, 2)
                        aRsl(k, 4) = aCT(j, 4) * aDS(i, 3)
                        aRsl(k, 5) = aCT(j, 5)
                    Else
                        aRsl(dic.Item(dKey), 4) = aRsl(dic.Item(dKey), 4) + aCT(j, 4) * aDS(i, 3)
                    End If
                    j = j + 1
                Loop Until aCT(j, 1) <> aCT(j - 1, 1) Or j = UBound(aCT)
                Exit For
            End If
        Next
    Next
    Sheets("Tong hop").Range("G6").Resize(k + 1, 5) = aRsl
    Set dic = Nothing
    MsgBox Timer() - tmr
End Sub
VBA thật là vi diệu, em thỉnh thoảng cũng cọc cạch vài code đơn giản, nhưng nó chạy khá chậm. Cám ơn bác rất nhiều!
Bài đã được tự động gộp:

@Chủ bài đăng: Bạn xem có thể tạo bảng tra công thức pha chế thành phẩm như vầy có tiện không:

Mã đồ uốngCC001CC002CC003CC004CC005CC006
TênHồng Trà MHồng Trà LSữa Tr Châu MSữa Tr Châu LTrà xanh H_MTrà xanh H_L
Mã NLĐơn vị
BB002Cái
1​
1​
1​
AA004Gam
4​
5.2​
AA011Gam
2​
2.2​
AA005Gam
15​
17​
AA003Gam
2​
2.2​
AA006Gam
30​
30​
15​
15​
15​
15​
BB004Cái
1​
1​
1​
1​
1​
1​
BB005Cái
1​
1​
1​
1​
1​
1​
BB001Cái
1​
1​
1​
AA012Gam
250​
300​
AA009Gam
45​
45​
4​
5.2​
AA013Gam
20​
20​
AA014Gam
15​
15​
AA009Gam
45​
45​
4​
5.2​
Vâng, đây cũng là cách hay và đơn giản ạ, cám ơn bác nhiều!
 
Upvote 0
Web KT

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

Back
Top Bottom