Dim arrBom 'bom表
Dim arrOUT '输出表
Dim arrDD '订单表
Dim n As Integer
Dim d As Object
Sub F(p, Q)
Dim i, s
i = d(p)
While (arrBom(i, 1) & arrBom(i, 3) = p)
n = n + 1
For j = 1 To 4
arrOUT(n, j) = arrBom(i, j + 3)
Next
arrOUT(n, 5) = arrBom(i, 8) * Q
s = arrBom(i, 4) & arrBom(i, 6)
If d.exists(s) Then _
Call F(s, arrOUT(n, 5))
i = i - 1
Wend
End Sub
Sub Demo()
Dim i&, j&, c&, p, k
Set d = CreateObject("scripting.dictionary")
arrBom = Sheets("BOM").Range("a1").CurrentRegion
For i = 2 To UBound(arrBom)
d(arrBom(i, 1) & arrBom(i, 3)) = i
Next
ReDim arrOUT(1 To UBound(arrBom) * 2, 1 To 5): c = 0
For Each k In Array("编号", "名称", "规格", "单位", "数量")
c = c + 1
arrOUT(1, c) = k
Next
n = 1
arrDD = Sheets("目标").Range("b1").CurrentRegion
For i = 3 To UBound(arrDD)
n = n + 1
arrOUT(n, 1) = arrDD(i, 1)
arrOUT(n, 2) = arrDD(i, 2)
arrOUT(n, 3) = arrDD(i, 3)
arrOUT(n, 5) = arrDD(i, 4)
p = arrDD(i, 1) & arrDD(i, 3)
Call F(p, arrDD(i, 4))
Next
Sheets("目标").Range("L9").Resize(n, UBound(arrOUT, 2)) = arrOUT
End Sub
根据那个帖子里的内容,发现跟我的这个需求很接近,完成可以解决我的问题。
但是有个问题 这段代码写的太牛了,很多函数都看不明白,能帮忙写一下注释吗,谢谢
|