|
本帖最后由 缔造者 于 2013-10-27 15:58 编辑
给出的效果结果中个别第二大值貌似有误,请核查!
提取第二大值没想出好法,经向“山菊花”版主请教,套用了他的程序,结果第二大值还是有误,暂提交。
经“yangyangzhifeng”高手的再次修改,基本正确。
“yangyangzhifeng”的代码:- Sub test()
- Dim d As Object, ds As Object
- Dim i&, ar, t, br(), r
- Set d = CreateObject("scripting.dictionary")
- Set ds = CreateObject("scripting.dictionary")
- ar = Sheet1.Range("a1").CurrentRegion
- ReDim br(1 To UBound(ar), 1 To 3)
- For i = 3 To UBound(ar)
- r = d(Trim(ar(i, 1)))
- If r = "" Then
- r = d.Count: d(Trim(ar(i, 1))) = r
- br(r, 1) = ar(i, 1)
- br(r, 2) = ar(i, 2)
- ds(Trim(ar(i, 1))) = ar(i, 3)
- Else
- ds(Trim(ar(i, 1))) = ds(Trim(ar(i, 1))) + ar(i, 3)
- If br(r, 3) = "" Then
- br(r, 3) = ar(i, 2)
- If br(r, 2) > br(r, 3) Then
- t = br(r, 2): br(r, 2) = br(r, 3): br(r, 3) = t
- End If
- Else
- If ar(i, 2) > br(r, 3) Then
- br(r, 2) = br(r, 3): br(r, 3) = ar(i, 2)
- ElseIf ar(i, 2) > br(r, 2) Then
- br(r, 2) = ar(i, 2)
- End If
- End If
- End If
- Next
- Range("n2").Resize(UBound(ar), 3).ClearContents
- Range("n2:p2") = Array("Code", "Date", "Qty.")
- [n3].Resize(d.Count, 2) = br
- [p3].Resize(ds.Count, 1) = Application.Transpose(ds.items)
- Set d = Nothing
- Set ds = Nothing
- End Sub
复制代码 “山菊花”版主的代码(修改后的正确代码):- Sub tiqu()
- Dim ds As Object, d As Object
- Dim nRow&, i&, n&, m&, Arr(), Brr()
- Set ds = CreateObject("scripting.dictionary") '定义字典
- Set d = CreateObject("scripting.dictionary")
- nRow = Range("a1").CurrentRegion.Rows.Count
- Arr = Range("a3:c" & nRow).Value
- ReDim Brr(1 To nRow, 1 To 3)
- For i = 1 To nRow - 2
- n = ds(Arr(i, 1))
- If n = 0 Then
- m = m + 1
- n = m
- ds(Arr(i, 1)) = m
- d(Arr(i, 1)) = Arr(i, 3)
- Brr(m, 1) = Arr(i, 1)
- Else
- d(Arr(i, 1)) = d(Arr(i, 1)) + Arr(i, 3)
- End If
- If Arr(i, 2) >= Brr(n, 3) Then
- Brr(n, 2) = Brr(n, 3)
- Brr(n, 3) = Arr(i, 2)
- ElseIf Arr(i, 2) > Brr(n, 2) Then
- Brr(n, 2) = Arr(i, 2)
- End If
- Next
- For i = 1 To m
- If Brr(i, 2) = "" Then Brr(i, 2) = Brr(i, 3)
- Next
- Range("q2:s2") = Array("Code", "Date", "Qty.")
- Range("q3:r" & nRow).Value = Brr
- Range("s3").Resize(d.Count, 1).Value = Application.Transpose(d.items)
- Set d = Nothing
- Set ds = Nothing
- End Sub
复制代码 |
评分
-
查看全部评分
|