Eu faço isso o tempo todo com vba. Tenho certeza de que usei o mesmo método desde o escritório 95 ', com pequenas alterações feitas para o posicionamento da coluna. Isso pode ser feito com menos linhas se você não definir as variáveis. Isso pode ser feito mais rapidamente se você tiver muitas linhas para percorrer ou mais coisas com as quais precisa definir seu grupo.
Eu me deparei com situações em que um 'grupo' é baseado em 2 a 5 células. Este exemplo analisa apenas uma coluna, mas pode ser expandida facilmente se alguém dedicar algum tempo para brincar com ela.
Isso pressupõe 3 colunas e você deve classificar pela coluna group_values. Antes de executar a macro, selecione a primeira célula que você deseja comparar na coluna group_values.
'group_values, some_number, empty_columnToHoldSubtotals
'(o material vai aqui)
'cookie 1 vazio
'cookie 3 vazio
Bolo 4 vazio
0 chapéu vazio
'hat 3 empty
'...
'Pare
Subtotal ()
'define duas strings e um contador de subtotal
Dim thisOne, thatOne As String
Dim subCount As Double
'semear os valores
thisOne = ActiveCell.Value
thatOne = ActiveCell.Offset (1, 0)
subCount = 0
'configure um loop que irá até atingir um valor de parada
While (ActiveCell.Value <> "stop")
'compara um valor de célula com a célula abaixo dela.
If (thisOne = thatOne) Então
'se as células forem iguais, a contagem de linhas será adicionada à subconta
subCount = subCount + ActiveCell.Offset (0, 1) .Value
Outro
'se as células não forem iguais, a subconta é gravada e o subtotal é redefinido.
ActiveCell.Offset (0, 2) .Value = ActiveCell.Offset (0, 1) .Value + subCount
subCount = 0
Fim se
'selecione a próxima célula abaixo
ActiveCell.Offset (1, 0) .Selecione
'atribua os valores da célula ativa e a abaixo dela às variáveis
thisOne = ActiveCell.Value
thatOne = ActiveCell.Offset (1, 0)
Wend
End Sub