Se puede resolver sin necesidad de hacer una macro. Necesitas formular la columna de la izquierda de la base de datos de este modo:
En A1 escribes "1", en A6 lo siguiente:
=CONTAR.SI($B$5:B6;B6)+(0,0000001*FILA(B6))
... Y lo arrastras hasta el final de tus datos.
Entonces la tabla de resultados es esta:
La columna "H" no está formulada, es solo una serie empezando por el "1".
En I5 simplemente formulo esto:
=B5
(Suponiendo que tengamos los datos de la BBDD en la misma hoja).
En I6 formulo lo siguiente:
{=SI(ESERROR(CONSULTAV(K.ESIMO.MAYOR($A$5:$A$20;H6);$A$5:$B$20;2;FALSO));"";SI(CONTAR.SI($I$5:I5;CONSULTAV(K.ESIMO.MAYOR($A$5:$A$20;H6);$A$5:$B$20;2;FALSO))>0;"";CONSULTAV(K.ESIMO.MAYOR($A$5:$A$20;H6);$A$5:$B$20;2;FALSO)))}
Tiene que ser fórmula de matriz para que funcione, esto es, introducimos la fórmula y en lugar de pulsar ENTER, tenemos que pulsar CONTROL + SHIFT + ENTER. Escribimos la fórmula sin los {}, si la creamos correctamente excel los añadirá.
... Arrastramos hacia abajo la fórmula.
En la columna "J" formulo esto:
(En J5 y luego arrastro hacia abajo)
=SIERROR(CONSULTAV(I5;$B$5:$C$20;2;FALSO);"")
Entonces para rellenar los ítems, en K5 formulo así:
{=SIERROR(CONSULTAV($I5;SI($D$5:$D$20=K$4;$B$5:$E$20;0);4;FALSO);"")}
... De nuevo se trata de una fórmula de matriz. Arrastramos hacia abajo y hacia la derecha y listo.
Nota que en todas partes he utilizado los rangos hasta la fila 20, deberás adaptar las fórmulas a tu rango de datos.