nghiemcongdien
Thành viên chính thức
- Tham gia
- 6/10/16
- Bài viết
- 54
- Được thích
- 9
Bác @HieuCD ơi, bác có thể thêm code để tính ra giúp em ra cột I - Sản phẩm cuối giống như ví dụ của em ở bài 1 được không ạ.Bài nầy dể hơn . . .
Mã:Option Explicit Sub abc() Dim arr(), res(), a, d As Object, d2 As Object Dim sR&, i&, k&, ik&, j&, key$ Set d = CreateObject("scripting.dictionary") Set d2 = CreateObject("scripting.dictionary") With Sheets("DATA") arr = .Range("A2", .Range("G" & Rows.Count).End(xlUp)).Value End With sR = UBound(arr) ReDim res(1 To sR * 2, 1 To 6) For i = 1 To sR d(arr(i, 1)) = d(arr(i, 1)) & "," & i Next i For i = 1 To sR If d.exists(arr(i, 4)) Then Call DeQui(arr, res, d, d2, k, Split(d(arr(i, 4)), ","), arr(i, 7), arr(i, 1)) Else key = arr(i, 1) & "|" & arr(i, 4) If d2.exists(key) = False Then k = k + 1 d2(key) = k End If ik = d2(key) res(ik, 1) = arr(i, 1): res(ik, 3) = arr(i, 4) res(ik, 5) = arr(i, 6): res(ik, 6) = res(ik, 6) + arr(i, 7) End If Next i Sheets("BOM").Range("A2").Resize(k, 6) = res End Sub Sub DeQui(arr, res, d, d2, k, ByVal a, ByVal sl#, ByVal sp$) Dim key$, j&, i&, ik& For j = 1 To UBound(a) i = CLng(a(j)) If d.exists(arr(i, 4)) Then Call DeQui(arr, res, d, d2, k, Split(d(arr(i, 4)), ","), arr(i, 7) * sl, sp) Else key = sp & "|" & arr(i, 4) If d2.exists(key) = False Then k = k + 1 d2(key) = k End If ik = d2(key) res(ik, 1) = sp: res(ik, 3) = arr(i, 4) res(ik, 5) = arr(i, 6): res(ik, 6) = res(ik, 6) + arr(i, 7) * sl End If Next j End Sub
Trong bài của bác @ptm0412 thì có cột này rồi tuy nhiên có 2 điểm em chưa dùng được luôn vì KHSX nhà em luôn luôn thay đổi. Vì vậy để tính toán đươc thì em phải cho vào KHSX là tất cả danh sách Thành phẩm (phải liệt kê ra) và kết quả của bác ý bỏ bớt các bán thành phẩm trung gian ra thẳng đến nguyên vật liệu cuối cùng nên em không có dữ liệu để biết sản phẩm cuối cùng của các bán thành phẩm trung gian là cái gì.
Kính mong hai bác giúp đỡ ạ.
Em cảm ơn!