|
就你原有代码,略处理一下,省事省力
Sub tt()
Application.ScreenUpdating = False
Application.Interactive = False
Dim i&, dic As Object, arr1
Set dic = CreateObject("scripting.dictionary")
With Sheet1
arr1 = .Cells(1, "a").Resize(.Cells(Rows.Count, "a").End(3).Row - 1, 2).Value
For i = 1 To UBound(arr1)
dic(arr1(i, 1)) = dic(arr1(i, 1)) + 1
Next
For i = 1 To UBound(arr1)
'arr1(i, 2) = dic(arr1(i, 1))
'换为下一句:
arr1(i, 1) = dic(arr1(i, 1))
Next
'.Cells(1, "e").Resize(UBound(arr1), 1) = Application.Index(arr1, , 2)
'换为下一句:
.Cells(1, "e").Resize(UBound(arr1), 1) = arr1
End With
Dim m&, d As Object, arr2
Set d = CreateObject("scripting.dictionary")
With Sheet1
arr2 = .Cells(1, "c").Resize(.Cells(Rows.Count, "c").End(3).Row - 1, 2).Value
For m = 1 To UBound(arr2)
d(arr2(m, 1)) = d(arr2(m, 1)) + 1
Next
For m = 1 To UBound(arr2)
'arr2(m, 2) = d(arr2(m, 1))同理
arr2(m, 1) = d(arr2(m, 1))
Next
'.Cells(1, "f").Resize(UBound(arr2), 1) = Application.Index(arr2, , 2)同理
.Cells(1, "f").Resize(UBound(arr2), 1) = arr2
End With
Dim x&
'下面的循环可以不要,处理办法见里面的文字
' For x = 1 To 65600
' Cells(x, "e") = Cells(x, "e") - 1 此处就是将E列统一减1,可以直接在上面的arr1(i, 1) = dic(arr1(i, 1))改成
'arr1(i, 1) = dic(arr1(i, 1))-1,也可在此处复制一个1再选择性粘贴---数值---减来实现
' Cells(x, "b") = Cells(x, "b") + Cells(x, "e") 你B列为空,实际也就是把E列复制过去。如果B列有值,还可以如上一行的选择性粘贴
' Cells(x, "f") = Cells(x, "f") - 1 此处及下一行同上
' Cells(x, "d") = Cells(x, "d") + Cells(x, "f")
'Next
Application.ScreenUpdating = True
Application.Interactive = True
End Sub |
评分
-
查看全部评分
|