|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
'假设A列是有序的
Option Explicit
Sub test()
Dim arr, i, j, k, pos, p, pp, cnt, a, b, c, n
pos = Array(2, 5, 6, 7)
arr = [a1].CurrentRegion
arr = Range("a2:g" & UBound(arr, 1) + 1) '无法自动获取最大行+1,变通了一下
For i = 2 To UBound(arr, 1) - 1
If n < arr(i, 3) Then n = arr(i, 3)
Next
ReDim brr(1 To UBound(arr, 1), 1 To 4 * n + 1)
For i = 1 To UBound(arr, 1) - 1
For j = i To UBound(arr, 1) - 1
If arr(j, 1) <> arr(j + 1, 1) Then p = i: i = j: Exit For
Next
Do
n = 0
For a = p To j
If n < arr(a, 3) Then n = arr(a, 3): pp = a
Next
If n = 0 Then Exit Do
cnt = cnt + 1: brr(cnt, 1) = arr(pp, 1)
For a = 0 To UBound(pos)
brr(cnt, (arr(pp, 3) - 1) * 4 + 2 + a) = arr(pp, pos(a))
Next
arr(pp, 3) = 0
For a = 1 To n - 1
For b = p To j
If arr(pp, 4) = arr(b, 2) Then
For c = 0 To UBound(pos)
brr(cnt, (arr(b, 3) - 1) * 4 + 2 + c) = arr(b, pos(c))
Next
arr(b, 3) = 0: pp = b: Exit For
End If
Next b, a
Loop
Next
With [i2]
.Resize(Rows.Count - 1, UBound(brr, 2)).ClearContents '输出位置自己修改
.Resize(cnt, UBound(brr, 2)) = brr
End With
End Sub |
评分
-
1
查看全部评分
-
|