Chia Số Lượng Sản Phẩm Theo Định Mức

Liên hệ QC

manhhung291093

Thành viên mới
Tham gia
16/8/18
Bài viết
5
Được thích
4
Em chào anh chị. Hiện em đang có 1 file excel phải làm thủ công. Mong muốn nhờ anh chị giúp đỡ để tự động hóa được công việc của mình.
Em có đọc qua các bài viết tương tự tuy nhiên chưa phù hợp với mong muốn hiện tại của em. ( các bài đăng chia công thức đóng gói ra thành 3 kích cỡ khác nhau ngày 21/08/20, bài đăng code VBA tách số lượng đóng gói ngày 14/12/2020 trên GPE)
- Em có mong muốn được anh chị giúp đỡ viết code để ra kết quả em đính kèm. ( nội dung em có để trong file )
Mong được sự giúp đỡ của anh/chị.
Em cám ơn rất nhiều.
 

File đính kèm

  • Chia Thùng.xlsx
    20.1 KB · Đọc: 25
Em có đọc qua các bài viết tương tự tuy nhiên chưa phù hợp với mong muốn hiện tại của em...
Thực tình không hiểu bạn chia theo kiểu gì, xem đi xem lại kết quả mong muốn vẫn không biết luật chia vì size này nhập với size kia lộn tùng phèo.
 
Thực tình không hiểu bạn chia theo kiểu gì, xem đi xem lại kết quả mong muốn vẫn không biết luật chia vì size này nhập với size kia lộn tùng phèo.
- Do mình chia theo mã hàng ấy bạn. chỉ quan trọng là cùng mã hàng trong 1 thùng. còn lại các size thì có thể bỏ chung, phù hợp với số lượng tối đa trong 1 thùng là được. hic
 
khi tôi mở sheet để xem dữ liệu thì tôi thấy các trường dữ liệu không đồng nhất. sheet Đơn hàng thì ghi mã hàng, kết quả thì ghi tên hàng, data thì lại để trống.
- Vậy đây là mã hàng hay tên hàng?
Giả sử bỏ qua việc đó:
- sheet data mà bạn có là số lượng tồn kho hay định mức?
- giả sử sheet data là tồn kho --> định mức đâu?
- giả sử sheet data là định mức --> vậy size là gì? sao định mức không có size mà 2 sheet kia có?
==> bạn nên làm lại file dữ liệu cho thật chuẩn, thật dễ hiểu, diễn tả đúng mục đích mong muốn thì sẽ có người giúp bạn. thân.anh-sheet1.JPG
 
khi tôi mở sheet để xem dữ liệu thì tôi thấy các trường dữ liệu không đồng nhất. sheet Đơn hàng thì ghi mã hàng, kết quả thì ghi tên hàng, data thì lại để trống.
- Vậy đây là mã hàng hay tên hàng?
Giả sử bỏ qua việc đó:
- sheet data mà bạn có là số lượng tồn kho hay định mức?
- giả sử sheet data là tồn kho --> định mức đâu?
- giả sử sheet data là định mức --> vậy size là gì? sao định mức không có size mà 2 sheet kia có?
==> bạn nên làm lại file dữ liệu cho thật chuẩn, thật dễ hiểu, diễn tả đúng mục đích mong muốn thì sẽ có người giúp bạn. thân.View attachment 252455
Chắc phần này là do diễn đạt của em thôi. Em gửi lại file chỉnh những nội dung chưa chuẩn.
- ở sheet định mức không có size là do size không ảnh hưởng đến số lượng đóng gói định mức ( do size chỉ in lên mã hàng, kích thước mã hàng không thay đổi bởi size ).
 

File đính kèm

  • Chia Thùng R2.xlsx
    20.2 KB · Đọc: 6
Chắc phần này là do diễn đạt của em thôi. Em gửi lại file chỉnh những nội dung chưa chuẩn.
- ở sheet định mức không có size là do size không ảnh hưởng đến số lượng đóng gói định mức ( do size chỉ in lên mã hàng, kích thước mã hàng không thay đổi bởi size ).
Chào Bạn,
Xin lỗi bạn OT chưa đủ kiến thức để thực hiện nổi bài toán này của bạn, chỉ là sau khi phân tích để hiểu nhu cầu của bạn thì OT thấy bài toán này của bạn rất hay,nó như là nhu cầu như tối ưu hóa về vấn đề 'Logicstic' mà công ty nào cũng cần đến đến nó.
Do đó OT up thêm hình ảnh mà OT đã phân tích (dữ liệu số màu xanh) để bổ sung ý giải thích giúp mọi người dễ hiểu mong muốn của bạn hơn (bảng dưới OT chỉ phân tích ví dụ một mã):

1609858985644.png

Diễn đàn có rất nhiều người tài giỏi và tư duy nhanh nhạy hi vọng bạn sớm sẽ nhận được sự trợ giúp theo ý.
 
Em chào anh chị. Hiện em đang có 1 file excel phải làm thủ công. Mong muốn nhờ anh chị giúp đỡ để tự động hóa được công việc của mình.
Em có đọc qua các bài viết tương tự tuy nhiên chưa phù hợp với mong muốn hiện tại của em. ( các bài đăng chia công thức đóng gói ra thành 3 kích cỡ khác nhau ngày 21/08/20, bài đăng code VBA tách số lượng đóng gói ngày 14/12/2020 trên GPE)
- Em có mong muốn được anh chị giúp đỡ viết code để ra kết quả em đính kèm. ( nội dung em có để trong file )
Mong được sự giúp đỡ của anh/chị.
Em cám ơn rất nhiều.
Mã:
Sub XYZ()
  Dim aData(), aDH(), Res(), Dic As Object, Mahang, DM&, tmp&, sInt&
  Dim r&, i&, k&, iR&, j&, sRow&
  
  Application.ScreenUpdating = False
  With Sheet4 'Sheets Data
    aData = .Range("C3", .Range("F" & Rows.Count).End(xlUp)).Value
  End With
  With Sheet2 'Sheet Don Hang
    i = .Range("A" & Rows.Count).End(xlUp).Row
    Res = .Range("A2:E" & i).Value
    .Range("A2:E" & i).Sort .[A2], 1, .[C2], , 1
    aDH = .Range("A2:E" & i + 1).Value
    .Range("A2:E" & i).Value = Res
  End With
  Set Dic = CreateObject("Scripting.Dictionary")

  sRow = UBound(aData, 1)
  For i = 1 To sRow
     Dic.Item(aData(i, 1)) = aData(i, 4)
  Next i
  sRow = UBound(aDH, 1) - 1
  ReDim Res(1 To sRow * 2, 1 To 8)
  For i = 1 To sRow
    DM = Dic.Item(aDH(i, 3))
    If aDH(i, 5) >= DM Then
      k = k + 1
      'Res(k, 1) = k
      Res(k, 2) = aDH(i, 1): Res(k, 3) = aDH(i, 2)
      Res(k, 4) = aDH(i, 3): Res(k, 5) = aDH(i, 4)
      Res(k, 6) = DM
      Res(k, 7) = Int(aDH(i, 5) / DM)
      Res(k, 8) = DM * Res(k, 7)
      aDH(i, 5) = aDH(i, 5) - Res(k, 8)
    End If
  Next i

  For i = 1 To sRow
    If Mahang <> aDH(i, 1) & aDH(i, 3) Then
      k = k + 1
      Mahang = aDH(i, 1) & aDH(i, 3)
      DM = Dic.Item(aDH(i, 3))
      For r = i To sRow
        If aDH(r, 5) > 0 Then
          If Res(k, 1) = Empty Then
            Res(k, 1) = k
            Res(k, 2) = aDH(r, 1):    Res(k, 3) = aDH(r, 2)
            Res(k, 4) = aDH(i, 3):    Res(k, 5) = aDH(r, 4)
            Res(k, 6) = aDH(r, 5):    Res(k, 7) = 1
            Res(k, 8) = Res(k, 6)
          Else
            Res(k, 3) = Res(k, 3) & Chr(10) & aDH(r, 2)
            Res(k, 5) = Res(k, 5) & Chr(10) & aDH(r, 4)
            If Res(k, 8) + aDH(r, 5) >= DM Then
              aDH(r, 5) = aDH(r, 5) + Res(k, 8) - DM
              Res(k, 6) = Res(k, 6) & Chr(10) & DM - Res(k, 8)
              Res(k, 8) = DM
              k = k + 1
              If aDH(r, 5) > 0 Then r = r - 1
            Else
              Res(k, 6) = Res(k, 6) & Chr(10) & aDH(r, 5)
              Res(k, 8) = Res(k, 8) + aDH(r, 5)
            End If
          End If
          If Mahang <> aDH(r + 1, 1) & aDH(r + 1, 3) Then
            i = r
            Exit For
          End If
        End If
      Next r
    End If
  Next i
  
  With Sheet3
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then .Range("A3:H" & i).Clear
    .Range("A3").Resize(k + 1, 8).Value = Res
    i = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("B3:H" & i).Sort .[B3], 1, .[D3], , 1, .[H3], 2
    .Range("A3") = 1
    .Range("A3:A" & i).DataSeries
    .Range("A3:H" & i).Borders.LineStyle = 1
    .Rows("3:" & i).EntireRow.AutoFit
  End With
  Application.ScreenUpdating = True
End Sub
Xem file
 

File đính kèm

  • Chia Thùng.xlsb
    28.5 KB · Đọc: 22
Mã:
Sub XYZ()
  Dim aData(), aDH(), Res(), Dic As Object, Mahang, DM&, tmp&, sInt&
  Dim r&, i&, k&, iR&, j&, sRow&
 
  Application.ScreenUpdating = False
  With Sheet4 'Sheets Data
    aData = .Range("C3", .Range("F" & Rows.Count).End(xlUp)).Value
  End With
  With Sheet2 'Sheet Don Hang
    i = .Range("A" & Rows.Count).End(xlUp).Row
    Res = .Range("A2:E" & i).Value
    .Range("A2:E" & i).Sort .[A2], 1, .[C2], , 1
    aDH = .Range("A2:E" & i + 1).Value
    .Range("A2:E" & i).Value = Res
  End With
  Set Dic = CreateObject("Scripting.Dictionary")

  sRow = UBound(aData, 1)
  For i = 1 To sRow
     Dic.Item(aData(i, 1)) = aData(i, 4)
  Next i
  sRow = UBound(aDH, 1) - 1
  ReDim Res(1 To sRow * 2, 1 To 8)
  For i = 1 To sRow
    DM = Dic.Item(aDH(i, 3))
    If aDH(i, 5) >= DM Then
      k = k + 1
      'Res(k, 1) = k
      Res(k, 2) = aDH(i, 1): Res(k, 3) = aDH(i, 2)
      Res(k, 4) = aDH(i, 3): Res(k, 5) = aDH(i, 4)
      Res(k, 6) = DM
      Res(k, 7) = Int(aDH(i, 5) / DM)
      Res(k, 8) = DM * Res(k, 7)
      aDH(i, 5) = aDH(i, 5) - Res(k, 8)
    End If
  Next i

  For i = 1 To sRow
    If Mahang <> aDH(i, 1) & aDH(i, 3) Then
      k = k + 1
      Mahang = aDH(i, 1) & aDH(i, 3)
      DM = Dic.Item(aDH(i, 3))
      For r = i To sRow
        If aDH(r, 5) > 0 Then
          If Res(k, 1) = Empty Then
            Res(k, 1) = k
            Res(k, 2) = aDH(r, 1):    Res(k, 3) = aDH(r, 2)
            Res(k, 4) = aDH(i, 3):    Res(k, 5) = aDH(r, 4)
            Res(k, 6) = aDH(r, 5):    Res(k, 7) = 1
            Res(k, 8) = Res(k, 6)
          Else
            Res(k, 3) = Res(k, 3) & Chr(10) & aDH(r, 2)
            Res(k, 5) = Res(k, 5) & Chr(10) & aDH(r, 4)
            If Res(k, 8) + aDH(r, 5) >= DM Then
              aDH(r, 5) = aDH(r, 5) + Res(k, 8) - DM
              Res(k, 6) = Res(k, 6) & Chr(10) & DM - Res(k, 8)
              Res(k, 8) = DM
              k = k + 1
              If aDH(r, 5) > 0 Then r = r - 1
            Else
              Res(k, 6) = Res(k, 6) & Chr(10) & aDH(r, 5)
              Res(k, 8) = Res(k, 8) + aDH(r, 5)
            End If
          End If
          If Mahang <> aDH(r + 1, 1) & aDH(r + 1, 3) Then
            i = r
            Exit For
          End If
        End If
      Next r
    End If
  Next i
 
  With Sheet3
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then .Range("A3:H" & i).Clear
    .Range("A3").Resize(k + 1, 8).Value = Res
    i = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("B3:H" & i).Sort .[B3], 1, .[D3], , 1, .[H3], 2
    .Range("A3") = 1
    .Range("A3:A" & i).DataSeries
    .Range("A3:H" & i).Borders.LineStyle = 1
    .Rows("3:" & i).EntireRow.AutoFit
  End With
  Application.ScreenUpdating = True
End Sub
Xem file
Em đã sử dụng được rồi. Em cám ơn anh Hiếu CD rất nhiều ạ. Quá tối ưu hóa cho công việc hiện tại của em. Em cám ơn anh nhiều ^^
Bài đã được tự động gộp:

Chào Bạn,
Xin lỗi bạn OT chưa đủ kiến thức để thực hiện nổi bài toán này của bạn, chỉ là sau khi phân tích để hiểu nhu cầu của bạn thì OT thấy bài toán này của bạn rất hay,nó như là nhu cầu như tối ưu hóa về vấn đề 'Logicstic' mà công ty nào cũng cần đến đến nó.
Do đó OT up thêm hình ảnh mà OT đã phân tích (dữ liệu số màu xanh) để bổ sung ý giải thích giúp mọi người dễ hiểu mong muốn của bạn hơn (bảng dưới OT chỉ phân tích ví dụ một mã):

View attachment 252466

Diễn đàn có rất nhiều người tài giỏi và tư duy nhanh nhạy hi vọng bạn sớm sẽ nhận được sự trợ giúp theo ý.
Vâng, em đã được anh Hiếu CD trợ giúp cho em rồi ạ. Quá nhanh và quá tuyệt vời
 
Web KT
Back
Top Bottom