本帖最后由 excel玉米 于 2019-10-22 20:53 编辑
功力尚浅,贻笑大方了。见附件。
Sub test()
Dim arr, brr, i, s, k, list, m, y
Set dic = CreateObject("scripting.dictionary")
arr = Sheets("数据表").Range("A1").CurrentRegion
ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2) + 2)
For i = 1 To UBound(arr)
list = arr(i, 1) & "_" & arr(i, 2) & "_" & arr(i, 3) & "_" & arr(i, 4) & "_" & arr(i, 5)
If dic.exists(list) Then
s = dic(list)
If Val(arr(i, 6)) - Val(brr(s, 8)) = 1 Then
If Len(brr(s, 6)) - VBA.InStrRev(brr(s, 6), ",") > 7 Then
y = Len(brr(s, 6)) - 5
brr(s, 6) = Left(brr(s, 6), y) & "-" & arr(i, 6)
brr(s, 7) = brr(s, 7) + 1
brr(s, 8) = arr(i, 6)
Else
brr(s, 6) = brr(s, 6) & "-" & arr(i, 6)
brr(s, 7) = brr(s, 7) + 1
brr(s, 8) = arr(i, 6)
End If
Else
brr(s, 6) = brr(s, 6) & "," & arr(i, 6)
brr(s, 7) = brr(s, 7) + 1
brr(s, 8) = arr(i, 6)
End If
Else
k = k + 1
dic(list) = k
brr(k, 1) = arr(i, 1)
brr(k, 2) = arr(i, 2)
brr(k, 3) = arr(i, 3)
brr(k, 4) = arr(i, 4)
brr(k, 5) = arr(i, 5)
brr(k, 6) = arr(i, 6)
brr(k, 7) = 1
brr(k, 8) = arr(i, 6)
End If
Next
brr(1, 7) = "Num"
Sheets("数据统计").Range("A1").CurrentRegion.Clear
Sheets("数据统计").Range("A1").Resize(k, 7) = brr
Set arr = Nothing
Set brr = Nothing
End Sub
|