Sub 提取列不重复值及对应数据()
Dim arr, brr, crr, drr, r, c, i, j, k, kk
Dim myd, yud, ks As String, ms
On Error Resume Next
Application.ScreenUpdating = False
Set myd = CreateObject("Scripting.Dictionary")
Set yud = CreateObject("Scripting.Dictionary")
With Sheet3
c = .[IV2].End(xlToLeft).Column
For r = 65536 To 1 Step -1
If .Cells(r, 7) <> "" Then '以G列判断最未数据行
arr = .Range(.Cells(1, 1), .Cells(r, c)).Value
Exit For
End If
Next
End With
ReDim brr(1 To UBound(arr), 1 To 17)
For i = 3 To UBound(arr)
ks = arr(i, 1)
If ks <> "" Then
If Not ymd.Exists(ks) Then
k = k + 1
myd(ks) = k
brr(k, 1) = ks
For c = 5 To 12
brr(k, c - 3) = arr(i, c)
Next
brr(k, 10) = arr(i, 13)
For c = 12 To 17
brr(k, c) = arr(i, c + 2)
Next
Else
brr(myd(ks), 10) = brr(myd(ks), 10) + arr(i, 13) '本表10列,汇总13M列
For c = 12 To 17
brr(myd(ks), c) = brr(myd(ks), c) + arr(i, c + 2)
Next
End If
End If
Next
ReDim crr(1 To k, 1 To 17)
For j = 1 To k
For cc = 1 To 17
crr(j, cc) = brr(j, cc)
Next
If brr(j, 10) <> 0 Then
For i = 3 To UBound(arr)
If arr(i, 10) = brr(j, 10) Then
crr(j, 11) = crr(j, 11) + arr(i, 14)
End If
Next
End If
Next
With Sheet4
.Range("A6:Q6536").ClearContents
.Range("A6").Resize(k, 17) = crr
End With
Application.ScreenUpdating = True
MsgBox "ok"
End Sub
|