Công thức tính số thùng trong Packinglist

Liên hệ QC

banglovetinhyeu

Thành viên mới
Tham gia
22/2/13
Bài viết
7
Được thích
0
Chào mọi người,
Em chưa nghiên cứu về VBA nên sau khi đọcTopic https://www.giaiphapexcel.com/diendan/threads/Đánh-số-tt-thùng-cho-packing-list.33681/ thì không hiểu. Nay em có vấn dề cần các anh chị trên diễn đàn giúp đỡ cong thúc tính số thùng cần mua để về đóng gói sản phẩm

Bên em có 2 kích thước thùng: Thùng lớn và nhỏ

Thùng lớn: Từ size XXS - XXL : Đóng được 55 cái / thùng. Từ size 1X-5X đóng 50 cái/thùng.
Thùng nhỏ: Tất cả các size đóng 22 cái/thùng

1580521286650.png



khách hàng dặt 60 cái size XXS thì sẽ dóng 1 thùng lón 55 cái và 1 thùng nhỏ 5 cái.

Còn nếu khách đạt 60 cái size 4X thì đóng 1 thùng lón 50 cái và 1 thùng nhỏ 10 cái

Khách đặt trong khoảng từ 22-55 cái thì vẫn đóng vào 1 thùng lớn

Em xin cám ơn
 
Chào mọi người,
Em chưa nghiên cứu về VBA nên sau khi đọcTopic https://www.giaiphapexcel.com/diendan/threads/Đánh-số-tt-thùng-cho-packing-list.33681/ thì không hiểu. Nay em có vấn dề cần các anh chị trên diễn đàn giúp đỡ cong thúc tính số thùng cần mua để về đóng gói sản phẩm

Bên em có 2 kích thước thùng: Thùng lớn và nhỏ

Thùng lớn: Từ size XXS - XXL : Đóng được 55 cái / thùng. Từ size 1X-5X đóng 50 cái/thùng.
Thùng nhỏ: Tất cả các size đóng 22 cái/thùng

View attachment 231528



khách hàng dặt 60 cái size XXS thì sẽ dóng 1 thùng lón 55 cái và 1 thùng nhỏ 5 cái.

Còn nếu khách đạt 60 cái size 4X thì đóng 1 thùng lón 50 cái và 1 thùng nhỏ 10 cái

Khách đặt trong khoảng từ 22-55 cái thì vẫn đóng vào 1 thùng lớn

Em xin cám ơn


Chỉ cần công thức thôi không cần đến code đâu bạn. Bạn xem thử nhé
 

File đính kèm

  • Dong thung.xlsx
    10.6 KB · Đọc: 29
Chào mọi người,
Em chưa nghiên cứu về VBA nên sau khi đọcTopic https://www.giaiphapexcel.com/diendan/threads/Đánh-số-tt-thùng-cho-packing-list.33681/ thì không hiểu. Nay em có vấn dề cần các anh chị trên diễn đàn giúp đỡ cong thúc tính số thùng cần mua để về đóng gói sản phẩm

Bên em có 2 kích thước thùng: Thùng lớn và nhỏ

Thùng lớn: Từ size XXS - XXL : Đóng được 55 cái / thùng. Từ size 1X-5X đóng 50 cái/thùng.
Thùng nhỏ: Tất cả các size đóng 22 cái/thùng

View attachment 231528



khách hàng dặt 60 cái size XXS thì sẽ dóng 1 thùng lón 55 cái và 1 thùng nhỏ 5 cái.

Còn nếu khách đạt 60 cái size 4X thì đóng 1 thùng lón 50 cái và 1 thùng nhỏ 10 cái

Khách đặt trong khoảng từ 22-55 cái thì vẫn đóng vào 1 thùng lớn

Em xin cám ơn
Bạn gửi file số liệu lên xem sao
 
Cách tính tay của bạn cũng sai dòng 27: còn 24 cái (lớn hơn 22) mà đóng thùng nhỏ

1603077025951.png

Theo tôi thì phải có bảng tra để tính toán như sau:

1603077150972.png

Và bảng tính toán:

1603077226636.png

Có thể kết hợp Power query để tính. Cụ thể là tính Net weight và gross weight

1603077304364.png

Sau đó sắp xếp lại để in ấn theo mẫu của Hải Quan
 

File đính kèm

  • PACKING LIST.xlsx
    34.5 KB · Đọc: 14
Em ví dụ:

Đây là số lượng khách hàng yêu cầu
View attachment 247650

CÒn file đính kèm là form cố định. Em đã làm 1 file nhưng làm tay và rất lâu. Có cách gì nhanh hơn để chia số lượng này kạ
Lần thứ nhất gởi yêu cầu và lặn 2 tuần. Lần thứ 2 gởi yêu cầu và lặn sâu hơn nữa năm.
Mã:
Sub MakeList()
Dim i As Long, j As Long, k As Long, kk As Long, sh As Worksheet
Dim dArr(), sArr(), Res(), Pcs As Long, Qty As Long, Dic As Object, tmp As String, x As Long
Set Dic = CreateObject("scripting.Dictionary")
Set sh = Sheets("Packing_List")
With Sheets("Order_Qty")
   sArr = .Range("A1", .[A65536].End(3)).Resize(, 15).Value
End With
ReDim Res(1 To 10000, 1 To UBound(sArr, 2) + 5)
ReDim dArr(1 To 10000, 1 To UBound(sArr, 2) + 5)
For i = 5 To UBound(sArr)
   For j = 3 To 12
      If IsNumeric(sArr(i, j)) Then
         If sArr(i, j) > 0 Then
            k = k + 1
            Res(k, 4) = sArr(i, 1)
            Res(k, 5) = sArr(i, 2)
            Res(k, j + 3) = sArr(i, j)
         End If
      End If

   Next
Next
sh.[A16].Resize(k, UBound(Res, 2)) = Res
For i = 1 To k
   For j = 6 To 15
      Pcs = sArr(3, j - 3)
      Qty = Res(i, j)
      Do While Qty >= Pcs 'per box
         kk = kk + 1
         dArr(kk, 4) = Res(i, 4) 'style
         dArr(kk, 5) = Res(i, 5) 'color
         dArr(kk, j) = Pcs
         Qty = Qty - Pcs
         If Qty > 0 And Pcs > Qty Then
            kk = kk + 1
            dArr(kk, 4) = Res(i, 4) 'style
            dArr(kk, 5) = Res(i, 5) 'color
            dArr(kk, j) = Qty
         End If
      Loop
   Next
Next
sh.[A16].Resize(10000, UBound(dArr, 2)).ClearContents
sh.[A16].Resize(10000, UBound(dArr, 2)).Interior.ColorIndex = xlNone

k = 0
For i = 1 To kk
   For j = 6 To 15
      If dArr(i, j) > 0 Then
         tmp = dArr(i, 4) & dArr(i, 5) & dArr(i, j) & sArr(2, j - 3)
         tmp = UCase(tmp)
         dArr(i, 16) = dArr(i, j)
         dArr(i, 18) = "=RC[-1]*RC[-2]"
         If Not Dic.exists(tmp) Then
            Dic.Add tmp, i
            dArr(i, 17) = 1
         Else
            x = Dic.item(tmp)
            dArr(x, 17) = dArr(x, 17) + 1
         End If
  
         If dArr(i, 16) > 21 Then
            dArr(i, 20) = "0.59*0.4*0.23"
         Else
            dArr(i, 20) = "0.59*0.4*0.115"
         End If
  
      End If
   Next
Next

For i = 1 To kk
   If dArr(i, 17) > 0 Then
      k = k + 1
      For j = 1 To UBound(dArr, 2)
         dArr(k, j) = dArr(i, j)
      Next
      If i = 1 Then
         dArr(k, 1) = 1
         dArr(k, 3) = dArr(k, 17)
      Else
         dArr(k, 1) = dArr(k - 1, 3) + 1
         dArr(k, 3) = dArr(k, 1) + dArr(k, 17) - 1
      End If
   End If
Next
sh.[A16].Resize(k, UBound(dArr, 2)) = dArr

End Sub
1603093991349.png
 
Lần thứ nhất gởi yêu cầu và lặn 2 tuần. Lần thứ 2 gởi yêu cầu và lặn sâu hơn nữa năm.
Mã:
Sub MakeList()
Dim i As Long, j As Long, k As Long, kk As Long, sh As Worksheet
Dim dArr(), sArr(), Res(), Pcs As Long, Qty As Long, Dic As Object, tmp As String, x As Long
Set Dic = CreateObject("scripting.Dictionary")
Set sh = Sheets("Packing_List")
With Sheets("Order_Qty")
   sArr = .Range("A1", .[A65536].End(3)).Resize(, 15).Value
End With
ReDim Res(1 To 10000, 1 To UBound(sArr, 2) + 5)
ReDim dArr(1 To 10000, 1 To UBound(sArr, 2) + 5)
For i = 5 To UBound(sArr)
   For j = 3 To 12
      If IsNumeric(sArr(i, j)) Then
         If sArr(i, j) > 0 Then
            k = k + 1
            Res(k, 4) = sArr(i, 1)
            Res(k, 5) = sArr(i, 2)
            Res(k, j + 3) = sArr(i, j)
         End If
      End If

   Next
Next
sh.[A16].Resize(k, UBound(Res, 2)) = Res
For i = 1 To k
   For j = 6 To 15
      Pcs = sArr(3, j - 3)
      Qty = Res(i, j)
      Do While Qty >= Pcs 'per box
         kk = kk + 1
         dArr(kk, 4) = Res(i, 4) 'style
         dArr(kk, 5) = Res(i, 5) 'color
         dArr(kk, j) = Pcs
         Qty = Qty - Pcs
         If Qty > 0 And Pcs > Qty Then
            kk = kk + 1
            dArr(kk, 4) = Res(i, 4) 'style
            dArr(kk, 5) = Res(i, 5) 'color
            dArr(kk, j) = Qty
         End If
      Loop
   Next
Next
sh.[A16].Resize(10000, UBound(dArr, 2)).ClearContents
sh.[A16].Resize(10000, UBound(dArr, 2)).Interior.ColorIndex = xlNone

k = 0
For i = 1 To kk
   For j = 6 To 15
      If dArr(i, j) > 0 Then
         tmp = dArr(i, 4) & dArr(i, 5) & dArr(i, j) & sArr(2, j - 3)
         tmp = UCase(tmp)
         dArr(i, 16) = dArr(i, j)
         dArr(i, 18) = "=RC[-1]*RC[-2]"
         If Not Dic.exists(tmp) Then
            Dic.Add tmp, i
            dArr(i, 17) = 1
         Else
            x = Dic.item(tmp)
            dArr(x, 17) = dArr(x, 17) + 1
         End If
 
         If dArr(i, 16) > 21 Then
            dArr(i, 20) = "0.59*0.4*0.23"
         Else
            dArr(i, 20) = "0.59*0.4*0.115"
         End If
 
      End If
   Next
Next

For i = 1 To kk
   If dArr(i, 17) > 0 Then
      k = k + 1
      For j = 1 To UBound(dArr, 2)
         dArr(k, j) = dArr(i, j)
      Next
      If i = 1 Then
         dArr(k, 1) = 1
         dArr(k, 3) = dArr(k, 17)
      Else
         dArr(k, 1) = dArr(k - 1, 3) + 1
         dArr(k, 3) = dArr(k, 1) + dArr(k, 17) - 1
      End If
   End If
Next
sh.[A16].Resize(k, UBound(dArr, 2)) = dArr

End Sub
View attachment 247711
Dạ công việc bận quá nên gửi yêu cầu xong thì quên luôn, đến giờ mới nhớ ra là mình có câu hỏi trên này cần sự giúp đỡ.
Xin cámơn chú vì sự giúpđỡ nàyạ
Bài đã được tự động gộp:

Có lẽ bạn làm rõ thêm dữ liệu đầu vào nằm chỗ nào trong file rồi tính tiếp
dạ dữ liệu đầu vào nằm ở đây ạ

đây là số lượng khách yêu cầu

1603889505378.png

việc của mình là chia ra số thùng cho từng size và màu theo form PKL em gửi ạ
Bài đã được tự động gộp:

Cách tính tay của bạn cũng sai dòng 27: còn 24 cái (lớn hơn 22) mà đóng thùng nhỏ

View attachment 247668

Theo tôi thì phải có bảng tra để tính toán như sau:

View attachment 247670

Và bảng tính toán:

View attachment 247671

Có thể kết hợp Power query để tính. Cụ thể là tính Net weight và gross weight

View attachment 247672

Sau đó sắp xếp lại để in ấn theo mẫu của Hải Quan
Em cám ơn sự giúp đỡ. Sẽ nghiên cứu theo hướng này ạ
 
Dạ công việc bận quá nên gửi yêu cầu xong thì quên luôn, đến giờ mới nhớ ra là mình có câu hỏi trên này cần sự giúp đỡ.
Code giúp cho bạn theo yêu cầu của bài này. Tuy nhiên sẽ không phù hợp nếu trong 1 packing list mà đóng nhiều mã hàng khác nhau, số lượng khác nhau
Lưu ý xem mẫu trong sheet order_qty. Dòng số 3 nhập số lượng cái/thùng theo size
Hy vọng file sẽ giúp được ít nhiều
 

File đính kèm

  • Make_Packing_List.xlsb
    56.4 KB · Đọc: 26
Code giúp cho bạn theo yêu cầu của bài này. Tuy nhiên sẽ không phù hợp nếu trong 1 packing list mà đóng nhiều mã hàng khác nhau, số lượng khác nhau
Lưu ý xem mẫu trong sheet order_qty. Dòng số 3 nhập số lượng cái/thùng theo size
Hy vọng file sẽ giúp được ít nhiều
Bạn có cách nào không dùng Dic :)
 
Không biết nữa. Để khi nào rãnh nghiên cứu thử. Nếu anh có thì gởi code lên cho mình tham khảo với
Mượn file của bạn, gom các vòng lập theo dòng
Mã:
Option Explicit
Sub XYZ()
  Dim eRow&, sRow&, sCol&, i&, j&, k&, kNo&
  Dim dArr(), sArr(), Res(), Pcs&, Q, M&, n&

  With Sheets("Packing_List")
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    If eRow > 15 Then .Range("A16:T" & eRow).Clear
  End With
 
  With Sheets("Order_Qty")
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    If eRow < 5 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A1:L" & eRow).Value
  End With
  sRow = UBound(sArr): sCol = UBound(sArr, 2)
  ReDim Res(1 To (sRow - 4) * (sCol - 2) * 2, 1 To 20)
 
  For i = 5 To sRow
    For j = 3 To sCol
      Q = sArr(i, j)
      If IsNumeric(Q) Then
         If Q > 0 Then
            Pcs = sArr(3, j)
            n = Q \ Pcs
            M = Q - Pcs * n
            If n > 0 Then
              k = k + 1
              kNo = kNo + 1:            Res(k, 1) = kNo
              kNo = kNo + n - 1:        Res(k, 3) = kNo
              Res(k, 4) = sArr(i, 1):   Res(k, 5) = sArr(i, 2)
              Res(k, j + 3) = Pcs:      Res(k, 16) = Pcs
              Res(k, 17) = n:           Res(k, 18) = Pcs * n
              Res(k, 20) = "0.59*0.4*0.23"
            End If
            If M > 0 Then
              k = k + 1
              kNo = kNo + 1:            Res(k, 1) = kNo:    Res(k, 3) = kNo
              Res(k, 4) = sArr(i, 1):   Res(k, 5) = sArr(i, 2)
              Res(k, j + 3) = M:        Res(k, 16) = M
              Res(k, 17) = 1:           Res(k, 18) = M
              If M > 21 Then
                Res(k, 20) = "0.59*0.4*0.23"
              Else
                Res(k, 20) = "0.59*0.4*0.115"
              End If
            End If
         End If
      End If
    Next j
  Next i
 
  If k Then Sheets("Packing_List").Range("A16").Resize(k, 20) = Res
End Sub
 
Code giúp cho bạn theo yêu cầu của bài này. Tuy nhiên sẽ không phù hợp nếu trong 1 packing list mà đóng nhiều mã hàng khác nhau, số lượng khác nhau
Lưu ý xem mẫu trong sheet order_qty. Dòng số 3 nhập số lượng cái/thùng theo size
Hy vọng file sẽ giúp được ít nhiều
Chào bác Quang Hải,

Hôm nay em gặp vấn đề mới. Code của bác lâu nay vẫn chạy tốt. Tuy nhiên vừa rồi khách hàng thêm size 6X vào đơn hàng.

Bác hướng dẫn giúp em sửa đoạn code trên để thêm vào 1 cột size 6X nữa ạ. Em mù VBA nên không biết phải chỉnh sửa chỗ nào

Cám ơn bác nhiều
 
Web KT
Back
Top Bottom