Hago esto todo el tiempo con vba. Estoy bastante seguro de que he usado el mismo método desde Office 95 ', con pequeños cambios realizados para la colocación de la columna. Se puede hacer con menos líneas si no define las variables. Se puede hacer más rápido si tiene muchas líneas por recorrer o más cosas con las que necesita definir su grupo.
Me he encontrado con situaciones en las que un "grupo" se basa en 2-5 celdas. Este ejemplo solo mira una columna, pero se puede ampliar fácilmente si alguien se toma el tiempo para jugar con ella.
Esto supone 3 columnas, y debe ordenar por la columna group_values. Antes de ejecutar la macro, seleccione la primera celda que desea comparar en la columna group_values.
'group_values, some_number, empty_columnToHoldSubtotals
'(las cosas van aquí)
'cookie 1 vacía
'cookie 3 vacía
'pastel 4 vacío
'sombrero 0 vacío
'sombrero 3 vacío
'...
'detener
Subtotal ()
'definir dos cadenas y un contador subtotal
Dim thisOne, thatOne As String
Dim subCount As Double
'sembrar los valores
thisOne = ActiveCell.Value
thatOne = ActiveCell.Offset (1, 0)
subCount = 0
'configurar un bucle que irá hasta que alcance un valor de detención
Mientras (ActiveCell.Value <> "stop")
'compara un valor de celda con la celda debajo de él.
If (thisOne = thatOne) Entonces
'si las celdas son iguales, el recuento de líneas se agrega al subcuenta
subCount = subCount + ActiveCell.Offset (0, 1) .Value
Más
'si las celdas no son iguales, se escribe el subcuenta y se restablece el subtotal.
ActiveCell.Offset (0, 2) .Value = ActiveCell.Offset (0, 1) .Value + subCount
subCount = 0
Terminara si
'seleccione la siguiente celda hacia abajo
ActiveCell.Offset (1, 0) .Seleccione
'asigna los valores de la celda activa y la que está debajo de ella a las variables
thisOne = ActiveCell.Value
thatOne = ActiveCell.Offset (1, 0)
Encaminarse a
End Sub