CÂN ĐỐI LƯỢNG HÀNG SẢN XUẤT

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

trongtrile01

Thành viên mới
Tham gia
11/1/16
Bài viết
5
Được thích
2
Nghề nghiệp
Nhân viên văn phòng
Em đang có một file cân đối lượng hàng để sản xuất như này.
Làm sao để tự động lấy số lô và số lượng tương ứng ở sheet "nguyen lieu" để điền vào trường thông tin "Lô 1, Lô 2, Lô 3" với điều kiện là tổng số lượng ở cột Y3 này bằng với ô L3 ở sheet "hang xuat".
Thêm một điều kiện nữa là nếu lô ở ô X3 chưa sử dụng hết thì sẽ được sử dụng tiếp ở ô N3, ô U3 sẽ được chuyển xuống ô M3.
Và các lô nguyên liệu được lấy theo nguyên tắc FIFO.
Nhờ các cao nhân giúp em với ạ.
 

File đính kèm

Em đang có một file cân đối lượng hàng để sản xuất như này.
Làm sao để tự động lấy số lô và số lượng tương ứng ở sheet "nguyen lieu" để điền vào trường thông tin "Lô 1, Lô 2, Lô 3" với điều kiện là tổng số lượng ở cột Y3 này bằng với ô L3 ở sheet "hang xuat".
Thêm một điều kiện nữa là nếu lô ở ô X3 chưa sử dụng hết thì sẽ được sử dụng tiếp ở ô N3, ô U3 sẽ được chuyển xuống ô M3.
Và các lô nguyên liệu được lấy theo nguyên tắc FIFO.
Nhờ các cao nhân giúp em với ạ.
Dạng nấy dùng công thức rất phức tạp, dùng code VBA hợp lý hơn
Mã:
Sub FiFo()
  Dim aNL(), aSP(), res(), ngay As Date, SL#, sp$
  Dim srNL&, srSP&, i&, r&, fR&, j&, c&
 
  With Sheets("nguyen lieu")
    aNL = .Range("B5", .Range("H" & Rows.Count).End(xlUp)).Value
  End With
  srNL = UBound(aNL)
  With Sheets("hang xuat")
    aSP = .Range("D3", .Range("L" & Rows.Count).End(xlUp)).Value
  End With
  srSP = UBound(aSP)
  ReDim res(1 To srSP, 1 To 12)
  For i = 1 To srSP
    ngay = aSP(i, 1)
    sp = Mid(aSP(i, 3), 1, 2)
    SL = aSP(i, 9)
    For j = 0 To 2
      fR = 1
      For r = fR To srNL
        If aNL(r, 2) > ngay Then GoTo DongKe
        If aNL(r, 7) > 0 Then
          If aNL(r, 3) = sp Then
            res(i, j * 4 + 1) = aNL(r, 1)
            res(i, j * 4 + 2) = aNL(r, 7)
            If aNL(r, 7) >= SL Then
              res(i, j * 4 + 3) = SL
              res(i, j * 4 + 4) = res(i, j * 4 + 2) - res(i, j * 4 + 3)
              aNL(r, 7) = aNL(r, 7) - SL
              GoTo DongKe
            Else
              res(i, j * 4 + 3) = aNL(r, 7)
              res(i, j * 4 + 4) = res(i, j * 4 + 2) - res(i, j * 4 + 3)
              SL = SL - aNL(r, 7)
              aNL(r, 7) = 0
              fR = r + 1
              Exit For
            End If
          End If
        End If
      Next r
    Next j
DongKe:
  Next i
  Sheets("hang xuat").Range("M3").Resize(srSP, 12) = res
End Sub
 
Rất là khó hiểu.

P/S: tiêu đề không nên viết hoa toàn bộ
Em cám ơn anh đã góp ý. Em sẽ lưu ý lần sau ạ
Bài đã được tự động gộp:

Dạng nấy dùng công thức rất phức tạp, dùng code VBA hợp lý hơn
Mã:
Sub FiFo()
  Dim aNL(), aSP(), res(), ngay As Date, SL#, sp$
  Dim srNL&, srSP&, i&, r&, fR&, j&, c&
 
  With Sheets("nguyen lieu")
    aNL = .Range("B5", .Range("H" & Rows.Count).End(xlUp)).Value
  End With
  srNL = UBound(aNL)
  With Sheets("hang xuat")
    aSP = .Range("D3", .Range("L" & Rows.Count).End(xlUp)).Value
  End With
  srSP = UBound(aSP)
  ReDim res(1 To srSP, 1 To 12)
  For i = 1 To srSP
    ngay = aSP(i, 1)
    sp = Mid(aSP(i, 3), 1, 2)
    SL = aSP(i, 9)
    For j = 0 To 2
      fR = 1
      For r = fR To srNL
        If aNL(r, 2) > ngay Then GoTo DongKe
        If aNL(r, 7) > 0 Then
          If aNL(r, 3) = sp Then
            res(i, j * 4 + 1) = aNL(r, 1)
            res(i, j * 4 + 2) = aNL(r, 7)
            If aNL(r, 7) >= SL Then
              res(i, j * 4 + 3) = SL
              res(i, j * 4 + 4) = res(i, j * 4 + 2) - res(i, j * 4 + 3)
              aNL(r, 7) = aNL(r, 7) - SL
              GoTo DongKe
            Else
              res(i, j * 4 + 3) = aNL(r, 7)
              res(i, j * 4 + 4) = res(i, j * 4 + 2) - res(i, j * 4 + 3)
              SL = SL - aNL(r, 7)
              aNL(r, 7) = 0
              fR = r + 1
              Exit For
            End If
          End If
        End If
      Next r
    Next j
DongKe:
  Next i
  Sheets("hang xuat").Range("M3").Resize(srSP, 12) = res
End Sub
em cám ơn ạ, không biết là em có làm nhầm chỗ nào không nhưng em bỏ code này vào thì không chạy được Anh nhỉ?
 
Lần chỉnh sửa cuối:

File đính kèm

Dạ em cám ơn Anh. Có vấn đề nữa là khi em thêm dữ liệu vào trong file này thì có chỗ vẫn không tính đủ khi cột L có số lượng 100000kg. Có chỗ thì bỏ qua luôn không tính ạ, không biết là có phải đồng bộ dữ liệu chỗ nào không anh nhỉ
Bài đã được tự động gộp:

Dạ em cám ơn Anh, em đã tìm ra vấn đề rồi ạ.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom