|

楼主 |
发表于 2022-2-15 13:09
|
显示全部楼层
本帖最后由 adud 于 2022-2-15 13:46 编辑
我也勉强解决了这个问题,但是若是第一列号码若不在一起,就会出错,所以必须提前按号码排序。我把代码贴出来,期待各位指点指点。先谢谢您的帮助。Sub test2()
Dim i%, j%, k%, l%, x%
Dim arr, brr
Dim d As Object
Set d = CreateObject("scripting.dictionary")
x = Range("a65536").End(xlUp).Row
Range("A2").Select
ActiveWorkbook.Worksheets("123").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("123").Sort.SortFields.Add Key:=Range("A2:A" & x), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("123").Sort
.SetRange Range("A1:D" & x)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
brr = Sheet1.Range("a2:d" & [A65536].End(3).Row)
For i = 1 To UBound(brr)
If d.exists(brr(i, 1) & brr(i, 4)) Then
MsgBox brr(i, 1) & "," & brr(i, 4) & "," & "存在重复"
Else
d(brr(i, 1) & brr(i, 4)) = ""
End If
Next
d.RemoveAll
For i = 1 To UBound(brr)
If d.exists(brr(i, 1)) Then
d(brr(i, 1)) = d(brr(i, 1)) + 1
Else
d(brr(i, 1)) = 1
End If
Next i
j = d.Count
m = d.keys
n = d.items
d.RemoveAll
ReDim arr(1 To j, 1 To 15)
For i = 1 To UBound(brr)
If d.exists(brr(i, 1)) Then
d(brr(i, 1)) = d(brr(i, 1)) + 1
arr(k, l) = brr(i, 4)
l = l + 1
Else
d(brr(i, 1)) = 1
k = k + 1
arr(k, 1) = brr(i, 1): arr(k, 2) = brr(i, 2):
arr(k, 3) = n(k - 1)
arr(k, 4) = brr(i, 3): arr(k, 5) = brr(i, 4)
l = 6
End If
Next i
Range("g2").Resize(UBound(arr, 1), UBound(arr, 2)).ClearContents
Range("g2").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub
|
|