云朵中的民族 发表于 2013-1-3 11:05
假如计算结果第二行起本来为空的话,点击按钮,会得到计算结果,可是字段全被清除了,请问应该怎么处理? ...
试试看,一并修正了- Sub test()
- Dim ar, br, i&, j&, cp$, n&, lc, mt
- Sheet3.Select
- Sheet3.Range("a4:s" & Sheet3.Range("a65536").End(3).Row).Sort key1:=[f4], key2:=[n4], header:=xlYes
- ar = Sheet3.Range("a4:s" & Sheet3.Range("a65536").End(3).Row)
- ReDim br(1 To UBound(ar), 1 To 8)
- ' n = 1: cp = ar(2, 6): lc = ar(2, 18)
- For i = 2 To UBound(ar)
- If ar(i, 6) <> cp Then
- n = n + 1: cp = ar(i, 6)
- br(n, 1) = cp
- br(n, 2) = 1: br(n, 3) = ar(i, 15): br(n, 4) = ar(i, 16)
- If n > 1 Then
- br(n - 1, 5) = br(n, 5) + ar(i - 1, 18) - lc
- If mt <> "" Then br(n - 1, 6) = ar(i - 1, 19) - mt
- If br(n - 1, 5) <> 0 Then br(n - 1, 7) = br(n - 1, 4) * 100 / br(n - 1, 5)
- If br(n - 1, 6) > 0 Then br(n - 1, 8) = br(n - 1, 4) / br(n - 1, 6)
- End If
- lc = ar(i, 18): mt = ar(i, 19)
- Else
- br(n, 2) = br(n, 2) + 1
- br(n, 3) = br(n, 3) + ar(i, 15)
- br(n, 4) = br(n, 4) + ar(i, 16)
- If i > 2 Then
- If ar(i, 18) < ar(i - 1, 18) Then
- br(n, 5) = br(n, 5) + ar(i - 1, 18) - lc: lc = 0
- End If
- End If
- End If
- Next
- br(n, 5) = br(n, 5) + ar(i - 1, 18) - lc
- If mt <> "" Then br(n, 6) = ar(i - 1, 19) - mt
- If br(n, 5) Then br(n, 7) = br(n, 4) * 100 / br(n, 5)
- If br(n, 6) > 0 Then br(n, 8) = br(n, 4) / br(n, 6)
- If Sheet2.Range("a65536").End(3).Row > 1 Then Sheet2.Range("a2:h" & Sheet2.Range("a65536").End(3).Row).ClearContents
- Sheet2.Range("a2").Resize(n, 8) = br
- Sheet2.Select
- End Sub
复制代码 |