Te anexo la macro para que funcione con diferentes fechas y con diferentes columnas, incluso pueden variar los códigos y los tipos de activos.
Es necesario que crees las hojas "Hoja1" y "Hoja2".
Coloca tu información en la hoja "Ranking" y el resultado quedará en la hoja "Hoja2".
Sub PesosRelativos2()
'Por.Dante Amor
Set h0 = Sheets("Ranking")
Set h1 = Sheets("Hoja1")
Set h2 = Sheets("Hoja2")
h1.Cells.Clear
h2.Cells.Clear
'
h0.Cells.Copy h1.[A1]
h1.Columns("B:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
h1.Columns("A:A").Copy h1.Columns("B")
h1.Columns("B:B").TextToColumns Destination:=h1.Range("B1"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
Other:=True, OtherChar:="_", _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
'
c = "C"
d = "D"
ant1 = h1.Cells(6, c)
ant2 = h1.Cells(6, d)
j = 6
col = h1.Cells(4, Columns.Count).End(xlToLeft).Column + 3
letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & col & ",4),""1"","""")")
u = h1.Range("A" & Rows.Count).End(xlUp).Row
ini = 6
n = 0
'
For i = 6 To u + 1
If ant1 <> h1.Cells(i, c) And ant2 = h1.Cells(i, d) Then
cuantos = n
End If
If ant2 <> h1.Cells(i, d) Then
fin = i - 1
j = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
If j < 6 Then j = 6
h1.Rows(ini & ":" & fin).Copy h2.Rows(j)
j = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
h1.Rows(ini & ":" & fin).Copy h2.Rows(j)
h2.Range("E" & j & ":" & letra & j + cuantos - 1).FormulaR1C1 = _
"=R[-" & n & "]C/SUM(R[-" & n & "]C5:R[-" & n & "]C" & col & ")"
ua = h2.Range("A" & Rows.Count).End(xlUp).Row
h2.Range("E" & j + cuantos & ":" & letra & ua).FormulaR1C1 = _
"=RANK(R[-" & cuantos & "]C,R[-" & cuantos & "]C5:R[-" & cuantos & "]C" & col & ",0)"
h2.Range("A" & j & ":A" & j + cuantos - 1).Replace "_PEN_", "_W_RV_", lookat:=xlPart
h2.Range("A" & j + cuantos & ":A" & ua).Replace "_W_", "_RANK_", lookat:=xlPart
ini = i
n = 0
End If
n = n + 1
ant1 = h1.Cells(i, c)
ant2 = h1.Cells(i, d)
Next
h2.Columns("B:D").Delete Shift:=xlToLeft
MsgBox "Pesos y ranking terminado"
End Sub
Saludos.Dante Amor