1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Option Explicit
Sub portpfolio()
Dim myPF As String
Dim myDico As Object
Dim mysheet As Worksheet
Dim myrange As Range
Dim mydata() As String
Set mysheet = ThisWorkbook.Worksheets(1)
Set myDico = CreateObject("Scripting.dictionary")
Set myrange = mysheet.Range("A2")
Do Until myrange = ""
myPF = myrange.Offset(, 1) & "_" & myrange.Offset(, 4) & "_" & myrange.Offset(, 12) & "_" & myrange.Offset(, 21)
If Not myDico.exists(myPF) Then
myDico.Add myPF, myrange.Offset(, 5) & ";" & myrange.Offset(, 5) * myrange.Offset(, 13)
Else
mydata = Split(myDico.Item(myPF), ";")
myDico.Item(myPF) = CDbl(mydata(0)) + myrange.Offset(, 5) & ";" & CDbl(mydata(1)) + myrange.Offset(, 5) * myrange.Offset(, 13)
End If
Set myrange = myrange.Offset(1)
Loop
If myDico.Count > 0 Then
Application.DisplayAlerts = False
With ThisWorkbook.Worksheets(2)
.Activate
.Cells.ClearContents
.Range("A1").Resize(myDico.Count).Value = Application.Transpose(myDico.Keys)
.Range("B1").Resize(myDico.Count).Value = Application.Transpose(myDico.Items)
.Range("B1").Resize(myDico.Count).TextToColumns semicolon:=True, comma:=False
End With
Application.DisplayAlerts = True
End If
ReDim mydata(0)
Set myrange = Nothing
Set mysheet = Nothing
Set myDico = Nothing
End Sub |
Partager