Phân bổ số lượng nguyên vật liệu từ kho hoặc từ đơn hàng mua vào thành phẩm

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Nhờ các bạn giúp đỡ. Mình cám ơn!

Chào các bạn, mình có một bài toán cần phân bổ số lượng nguyên vật liệu từ kho hoặc từ các đơn mua hàng đang mua về, ghi chú là từ kho hay từ số đơn hàng cho từng dòng thành phẩm. Hoặc từ cả 2 (kho và đơn hàng) hoặc từ 2 đơn hàng đang mua về.
Với số lượng nguyên vật liệu tồn kho chỉ là 11, nhưng do cấu trúc file mình đang làm nên số lượng nguyên vật liệu tồn kho hiển thị ở tất cả các dòng.
Không biết excel có công thức nào có thể liệt kê ra được như ví dụ trong file không?
Nhờ các bạn giúp đỡ. Mình cám ơn!

Trong khi chờ công thức của Excel 365, dùng đỡ hàm tự tạo bằng VBA

Function PhanBo(ByVal NVL As Range, ByVal TP_PO As Range, ByVal DinhMuc As Range, ByVal MaNVL$, ByVal Ton As Double, Optional dong& = 0)
  Dim arr(), sRow&, i&, r&, fR&, k&, res$(), DM#

sRow = NVL.Rows.Count
  ReDim arr(0 To sRow, 1 To 2)
  ReDim res(1 To sRow, 1 To 1)
  For i = 1 To sRow
    If NVL(i, 1) = MaNVL Then
      If DinhMuc(i, 1) < 0 Then
        If arr(0, 1) = Empty Then
          arr(0, 1) = " TU KHO"
          arr(0, 2) = Ton
        End If
      ElseIf DinhMuc(i, 1) > 0 Then
        k = k + 1
        arr(k, 1) = " TU PO " & TP_PO(i, 1)
        arr(k, 2) = DinhMuc(i, 1)
      End If
    End If
  Next i

For i = 1 To sRow
    If NVL(i, 1) = MaNVL Then
      If DinhMuc(i, 1) < 0 Then
        DM = -DinhMuc(i, 1)
        For r = fR To k
          If arr(r, 2) > DM Then
            If res(i, 1) = Empty Then
              res(i, 1) = DM & arr(r, 1)
            Else
              res(i, 1) = res(i, 1) & " & " & DM & arr(r, 1)
            End If
            arr(r, 2) = arr(r, 2) - DM
            fR = r
            Exit For
          Else
            If res(i, 1) = Empty Then
              res(i, 1) = arr(r, 2) & arr(r, 1)
            Else
              res(i, 1) = res(i, 1) & " & " & arr(r, 2) & arr(r, 1)
            End If
            DM = DM - arr(r, 2)
            If DM = 0 Then fR = r + 1:        Exit For
          End If
        Next r
      End If
    End If
  Next i
  If dong = 0 Then PhanBo = res Else PhanBo = res(dong, 1)
End Function

Công thức ô E2

=PhanBo($A$2:$A$22,$B$2:$B$22,$D$2:$D$22,A2,$C$2,ROW(A1))

Copy xuống
Hoặc nhập công thức mảng nhiều ô theo gợi ý trong file

www.giaiphapexcel.com/diendan/threads/ph%C3%A2n-b%E1%BB%95-s%E1%BB%91-l%C6%B0%E1%BB%A3ng-nguy%C3%AAn-v%E1%BA%ADt-li%E1%BB%87u-t%E1%BB%AB-kho-ho%E1%BA%B7c-t%E1%BB%AB-%C4%91%C6%A1n-h%C3%A0ng-mua-v%C3%A0o-th%C3%A0nh-ph%E1%BA%A9m.166923/#post-1114834

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Khóa học SprinGO phù hợp

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ

Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm