Option
Explicit
Sub
ss()
Dim
RngS
As
Range
Dim
arrD()
As
Variant
, arrS()
As
Variant
Dim
x
As
Long
Set
RngS = Selection
If
RngS.Columns.Count <> 2
Then
Exit
Sub
arrD = GetDistinct(RngS.Columns(1))
ReDim
arrS(1
To
UBound(arrD) + 1, 1
To
2)
For
x = LBound(arrD)
To
UBound(arrD)
arrS(x + 1, 1) = arrD(x)
arrS(x + 1, 2) = WorksheetFunction.SumIf(RngS.Columns(1), arrS(x + 1, 1), RngS.Columns(2))
Next
x
RngS.ClearContents
RngS.Cells(1).Resize(UBound(arrS, 1), UBound(arrS, 2)).Value = arrS
End
Sub
Private
Function
GetDistinct(
ByVal
oTarget
As
Range)
As
Variant
Dim
varArray
As
Variant
Dim
objMyDic
As
Object
Dim
v
As
Variant
Set
objMyDic = CreateObject(
"Scripting.Dictionary"
)
varArray = oTarget
For
Each
v
In
varArray
objMyDic(v) = v
Next
GetDistinct = objMyDic.Items()
End
Function