回復 5#Hsieh
硏究了很久還是有不解的地方,以下是我消化及不懂的地方請指導,謝謝
Sub tt()
Dim Ay(), C As Range, A As Range '宣告 AY()是陣列 C 是範圍 A 是範圍
Set d = CreateObject("Scripting.Dictionary") '庫存
Set ds = CreateObject("Scripting.Dictionary") '索引
For Each A In Range([E2], [E65536].End(xlUp)) 'A 的範圍在SHEET1 的E2到最後一筆資料 庫存
d(UCase(A)) = A.Offset(, 2) '給D(A)--G欄庫存數量 ?是否重複的零件編號會保留最後一個?
Next
With Sheets("索引")
For Each A In .Range(.[A2], .[A65536].End(xlUp)) '索引
ds(A.Value) = A.Offset(, 1) 'DS(A) 取得BOM表的名稱
Next
Ar = [A65536].End(xlUp).Resize(, 4) 'AR 指定為最後一筆的A:D
With Sheets(ds(Ar(1, 3))) '最後一筆C欄所對應的工作表(BOM)
Set A = .Rows(2).Find(Ar(1, 3)).EntireColumn.SpecialCells(xlCellTypeConstants, 1)
'指定 A = 第二列找到SHEET1最後一筆C欄對應到的欄中有數值資料的欄位
For Each C In A
ReDim Preserve Ay(s) '重新宣告陣列AY(S)大小
x = .Cells(C.Row, 1).Value '指定 X = A陣列中有值的A欄的零件編號
Ay(s) = Array(Ar(1, 1), Ar(1, 2), Ar(1, 3), Ar(1, 4), x, C * Ar(1, 4), d(x) - C * Ar(1, 4), Date)
'為什麼d(x)會找到最後一筆庫存資料?DICTIONARY是相同零件編號會覆蓋掉原來的值嗎?
s = s + 1
Next
End With
End With
[A65536].End(xlUp).Resize(s, 8) = Application.Transpose(Application.Transpose(Ay)) '轉置
End Sub作者: Hsieh 時間: 2011-2-8 15:31