|
发表于 2022-5-24 21:02
|
显示全部楼层
本楼为最佳答案
請測試看看,謝謝
Sub test()
Dim Arr, Ar, xD, xD1, xD2, Brr(), T$, R&, R1&, C%, Ct%, Qty%, i&
Set xD = CreateObject("Scripting.Dictionary") 'count、xR
Set xD1 = CreateObject("Scripting.Dictionary") 'count+Qty
Set xD2 = CreateObject("Scripting.Dictionary") 'Row1
Ct = Sheets(2).[b1]: Qty = Sheets(2).[d1]
Arr = Sheet1.Range("A1").CurrentRegion
For i = 2 To UBound(Arr)
T = Arr(i, 2): T1 = T & "|" & Arr(i, 4)
If xD.Exists(T) Then
If Not xD2.Exists(T1) Then
xD2(T1) = xD2(T1) + 1
xD(T) = xD(T) + xD2(T1)
End If
Else
xD2(T1) = 1: xD(T) = 1
End If
xD(Arr(i, 2) & "_Qty") = xD(T & "_Qty") + Arr(i, 5) 'count+Qty
Next
xD2.RemoveAll
For i = 2 To UBound(Arr)
T = Arr(i, 2): If xD(T) > Ct And xD(T & "_Qty") > Qty Then xD1(T) = ""
Next
For i = 2 To UBound(Arr)
T = Arr(i, 2): If xD1.Exists(T) Then xD2(Arr(i, 4)) = 1 'xD2:Row1
Next
If xD2.Count < 1 Then MsgBox "Nothing": Exit Sub
With Sheets(2)
.[a3].CurrentRegion.Offset(1, 0) = ""
With .Range("e4").Resize(1, xD2.Count)
.Value = xD2.keys
.Sort Key1:=.Item(1), Order1:=1, _
Header:=2, OrderCustom:=1, Orientation:=2
End With
.[a4] = "Name": .[b4] = "Total": .[c4] = "Spec": .[d4] = "WH"
Ar = .Range("a4", .Cells(4, xD2.Count + 4))
End With
ReDim Brr(1 To 1000, 1 To xD2.Count + 4)
For i = 2 To UBound(Arr)
T = Arr(i, 2): If Not xD1.Exists(T) Then GoTo 96
C = Application.Match(Arr(i, 4), Ar, 0)
If xD.Exists(T & "|" & Arr(i, 1)) Then
R1 = xD(T & "|" & Arr(i, 1)): Brr(R1, C) = Arr(i, 5)
Else
R = R + 1: xD(T & "|" & Arr(i, 1)) = R
Brr(R, 1) = Arr(i, 2): Brr(R, 2) = xD(T & "_Qty")
Brr(R, 3) = xD(T): Brr(R, 4) = Arr(i, 1)
Brr(R, C) = Arr(i, 5)
End If
96: Next
With Sheets(2)
With .[a5].Resize(R, xD2.Count + 4)
.Value = Brr
.Sort Key1:=.Item(1), Order1:=2, _
Key2:=.Item(4), Order2:=1, Header:=2, Orientation:=1
End With
End With
End Sub
|
-
|