Mientras tu contestabas, yo estaba dandole vueltas a esta opcion, que no la he probado pero se me ocurre que podría funcionar.
Código vb:
Ver originalPrivate Sub Totalizacion()
Dim Hasta As Integer, LineaActual As Integer, LineaTotales As Integer
Hasta = List1.ListCount - 1
' Efectuamos un bucle invertido desde el final
For LineaActual = Hasta To 0 Step -1
' Conservaremos en el 1º los totales de las referencias iguales
LineaTotales = ElPrimero(List1.List(LineaActual))
' Si la linea de Totales es distinta de la linea actual,
' significa que como mínimo hay dos
If LineaTotales <> LineaActual Then
' Sumamos la actual a la inicial
List2.List(LineaTotales) = List2.List(LineaTotales) + List2.List(LineaActual)
List3.List(LineaTotales) = List3.List(LineaTotales) + List3.List(LineaActual)
List4.List(LineaTotales) = List4.List(LineaTotales) + List4.List(LineaActual)
List5.List(LineaTotales) = List5.List(LineaTotales) + List5.List(LineaActual)
' Eliminamos la linea procesada de todos los List
List1.RemoveItem (LineaActual)
List2.RemoveItem (LineaActual)
List3.RemoveItem (LineaActual)
List4.RemoveItem (LineaActual)
List5.RemoveItem (LineaActual)
End If
Next
End Sub
Private Function ElPrimero(Referencia As String) As Integer
' Devuelve el número de indice del 1er elemento coincidente
For ElPrimero = 0 To List1.ListCount - 1
If List1.List(ElPrimero) = Referencia Then Exit Function
Next
End Function
La idea es mantener como linea de Total la primera aparicion de la referencia en el list, acumulando hacia esta desde el final hacia arriba.
Si quieres pruebalo y me dices si algo funciona o falla.