Làm packing list thùng hàng tự động theo bảng đơn đặt hàng bảng giới hạn số lượng/thùng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hvthinh77

Thành viên chính thức
Tham gia
16/4/09
Bài viết
57
Được thích
8
Chào mọi người

Em đang làm trong ngành giày da cho công ty mới thành lập của Châu Âu, có 1 yêu cầu làm packing list nhanh khi có được thông tin đơn hàng và bảng số lượng đôi tối đa/thùng, thì cần làm packing list nhanh để ước lượng số thùng và diện tích của đơn hàng. Hiện em đang làm thủ công và mất nhiều thời gian, vì vậy cần mọi người chỉ giúp ạ

Bảng đính kèm là các thông tin liên quan
* File excel có 3 sheets:
** 1 sheet tên Size là số lượng đôi tối đa trong thùng theo mỗi loại khách hàng
** 1 sheet tên Order là mẫu đơn hàng khi em nhận được
** Sheet cuối là phần Packing list e muốn được làm tự động dựa vào 2 sheet đầu (em đã thử điền tay vài thông tin cho mọi người tham khảo)
=> Yêu cầu là với thùng tối đa thì mình sẽ tính là 1 thùng, nếu có số lượng còn dư lại 1 ít thì không cần điền số thùng
Ví dụ tối đa là 200 đôi/thùng, thì nếu khách đặt 220 đôi thì 200 đôi/thùng đầu = thùng 1, còn 20 đôi thì cứ tách thành 1 dòng không cần ghi thùng cũng được (để em gom gom mấy cái lẻ thành 1 thùng để tối ưu số thùng và diện tích khi xuất cont. Nếu yêu cầu này không thực hiện được cũng không sao.
* Hình ảnh là tham khảo thêm

Em cần giúp tách ra thành từng dòng theo mỗi size theo số lượng thùng tối đa cũng được, còn số thùng có thể em tự điền tay vào.

Rất mong các anh chị giúp đỡ ạ. Số điện thoại em 0961829378 xin phép ad cho phép đăng nếu anh chị có hỏi thêm gì thì nhắn em gọi lại ạ, do e đang cần hỗ trợ.
 

File đính kèm

Có cao nhân nào hỗ trợ mình với ạ
 
Chào mọi người

Em đang làm trong ngành giày da cho công ty mới thành lập của Châu Âu, có 1 yêu cầu làm packing list nhanh khi có được thông tin đơn hàng và bảng số lượng đôi tối đa/thùng, thì cần làm packing list nhanh để ước lượng số thùng và diện tích của đơn hàng. Hiện em đang làm thủ công và mất nhiều thời gian, vì vậy cần mọi người chỉ giúp ạ

Bảng đính kèm là các thông tin liên quan
* File excel có 3 sheets:
** 1 sheet tên Size là số lượng đôi tối đa trong thùng theo mỗi loại khách hàng
** 1 sheet tên Order là mẫu đơn hàng khi em nhận được
** Sheet cuối là phần Packing list e muốn được làm tự động dựa vào 2 sheet đầu (em đã thử điền tay vài thông tin cho mọi người tham khảo)
=> Yêu cầu là với thùng tối đa thì mình sẽ tính là 1 thùng, nếu có số lượng còn dư lại 1 ít thì không cần điền số thùng
Ví dụ tối đa là 200 đôi/thùng, thì nếu khách đặt 220 đôi thì 200 đôi/thùng đầu = thùng 1, còn 20 đôi thì cứ tách thành 1 dòng không cần ghi thùng cũng được (để em gom gom mấy cái lẻ thành 1 thùng để tối ưu số thùng và diện tích khi xuất cont. Nếu yêu cầu này không thực hiện được cũng không sao.
* Hình ảnh là tham khảo thêm

Em cần giúp tách ra thành từng dòng theo mỗi size theo số lượng thùng tối đa cũng được, còn số thùng có thể em tự điền tay vào.

Rất mong các anh chị giúp đỡ ạ. Số điện thoại em 0961829378 xin phép ad cho phép đăng nếu anh chị có hỏi thêm gì thì nhắn em gọi lại ạ, do e đang cần hỗ trợ.
Chạy code VBA. Kiểm tra lại
Mã:
Option Explicit

Sub XYZ()
  Dim aSize(), aOrder(), res(), dic As Object, loai$, PoNo$
  Dim i&, SizeRow&, j&, k&, d&, box&, dm&, sl&
 
  Set dic = CreateObject("scripting.dictionary")
  ReDim res(1 To 1000, 1 To 8) 'Ket qua 1000 dong, Neu Error nhap so lon hon
  With Sheets("Size")
    aSize = .Range("A2", .Cells(.Range("A1000000").End(xlUp).Row, .Range("AAA2").End(xlToLeft).Column)).Value
  End With
  For i = 2 To UBound(aSize, 1)
    If i = 25 Then
      j = 0
    End If
    For j = 2 To UBound(aSize, 2)
      If aSize(i, j) <> Empty Then
        dic(aSize(i, 1) & "|" & aSize(1, j)) = aSize(i, j)
      End If
    Next j
  Next i
 
  With Sheets("Order")
    aOrder = .Range("A3:AM" & .Range("A1000000").End(xlUp).Row).Value
  End With
  For i = 2 To UBound(aOrder, 1)
    If aOrder(i, 1) = 1 Then
      'res(k + 1, 6) = aOrder(i, 2) 'Tuy chon 2 ***
      PoNo = aOrder(i, 2) 'Tuy chon 1***
      loai = aOrder(i, 39)
      SizeRow = i - 1
      res(k + 1, 1) = Date
    End If
    If IsNumeric(aOrder(i, 1)) Then
      res(k + 1, 2) = aOrder(i, 10)
      res(k + 1, 3) = aOrder(i, 12)
      res(k + 1, 6) = PoNo 'Tuy chon 1***
      res(k + 1, 7) = aOrder(i, 6)
      For j = 13 To 35
        If aOrder(i, j) = "Prs" Then Exit For
        sl = aOrder(i, j)
        If sl > 0 Then
          dm = dic(aOrder(SizeRow, j) & "|" & loai)
          If dm = 0 Then dm = 99999 'Khong co trong bang size
          d = 0
          Do While sl > 0
            k = k + 1
            res(k, 4) = aOrder(SizeRow, j)
            If sl >= dm Then
              res(k, 5) = dm
              sl = sl - dm
              box = box + 1
              res(k, 8) = "Box " & box
              d = 1
            Else
              res(k, 5) = sl
              sl = 0
              If d = 0 Then
                box = box + 1
                res(k, 8) = "Box " & box
              End If
            End If
          Loop
        End If
      Next j
    End If
  Next i
 
  With Sheets("Packing list")
    i = .Range("D1000000").End(xlUp).Row
    If i > 2 Then .Range("A3:H" & i).Clear
    .Range("A3").Resize(k, 8) = res
    .Range("A3").Resize(k, 8).Borders.LineStyle = 1
  End With
End Sub
 
Chạy code VBA. Kiểm tra lại
Mã:
Option Explicit

Sub XYZ()
  Dim aSize(), aOrder(), res(), dic As Object, loai$, PoNo$
  Dim i&, SizeRow&, j&, k&, d&, box&, dm&, sl&
 
  Set dic = CreateObject("scripting.dictionary")
  ReDim res(1 To 1000, 1 To 8) 'Ket qua 1000 dong, Neu Error nhap so lon hon
  With Sheets("Size")
    aSize = .Range("A2", .Cells(.Range("A1000000").End(xlUp).Row, .Range("AAA2").End(xlToLeft).Column)).Value
  End With
  For i = 2 To UBound(aSize, 1)
    If i = 25 Then
      j = 0
    End If
    For j = 2 To UBound(aSize, 2)
      If aSize(i, j) <> Empty Then
        dic(aSize(i, 1) & "|" & aSize(1, j)) = aSize(i, j)
      End If
    Next j
  Next i
 
  With Sheets("Order")
    aOrder = .Range("A3:AM" & .Range("A1000000").End(xlUp).Row).Value
  End With
  For i = 2 To UBound(aOrder, 1)
    If aOrder(i, 1) = 1 Then
      'res(k + 1, 6) = aOrder(i, 2) 'Tuy chon 2 ***
      PoNo = aOrder(i, 2) 'Tuy chon 1***
      loai = aOrder(i, 39)
      SizeRow = i - 1
      res(k + 1, 1) = Date
    End If
    If IsNumeric(aOrder(i, 1)) Then
      res(k + 1, 2) = aOrder(i, 10)
      res(k + 1, 3) = aOrder(i, 12)
      res(k + 1, 6) = PoNo 'Tuy chon 1***
      res(k + 1, 7) = aOrder(i, 6)
      For j = 13 To 35
        If aOrder(i, j) = "Prs" Then Exit For
        sl = aOrder(i, j)
        If sl > 0 Then
          dm = dic(aOrder(SizeRow, j) & "|" & loai)
          If dm = 0 Then dm = 99999 'Khong co trong bang size
          d = 0
          Do While sl > 0
            k = k + 1
            res(k, 4) = aOrder(SizeRow, j)
            If sl >= dm Then
              res(k, 5) = dm
              sl = sl - dm
              box = box + 1
              res(k, 8) = "Box " & box
              d = 1
            Else
              res(k, 5) = sl
              sl = 0
              If d = 0 Then
                box = box + 1
                res(k, 8) = "Box " & box
              End If
            End If
          Loop
        End If
      Next j
    End If
  Next i
 
  With Sheets("Packing list")
    i = .Range("D1000000").End(xlUp).Row
    If i > 2 Then .Range("A3:H" & i).Clear
    .Range("A3").Resize(k, 8) = res
    .Range("A3").Resize(k, 8).Borders.LineStyle = 1
  End With
End Sub
Trời ơi cám ơn bạn nhiều, khổ nổi mình không biết gì về VBA luôn dù rất ngưỡng mộ và rất muốn học nhưng không có điều kiện... Để mình hỏi xem có ai rành rành cái này xin code của bạn vào chạy thử
 
Web KT

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

Back
Top Bottom