Estou sempre a fazer isto com a vba. Tenho quase a certeza que utilizo o mesmo método desde o “Office 95”, com pequenas alterações feitas para a colocação das colunas. Pode ser feito com menos linhas se não se definirem as variáveis. Pode ser feito mais rapidamente se tiver muitas linhas para percorrer ou mais coisas com as quais precisa de definir o seu grupo.
Já me deparei com situações em que um ‘grupo’ é baseado em 2-5 células. Este exemplo só olha para uma coluna, mas pode ser expandido facilmente se alguém levar tempo a jogar com ela.
Isto assume 3 colunas, e tem de ordenar pela coluna de valores do grupo_. Antes de executar a macro, seleccione a primeira célula que pretende comparar na coluna de valores de grupo_valores.
'group\_values, some\_number, empty\_columnToHoldSubtotals '(stuff goes here) 'cookie 1 empty 'cookie 3 empty 'cake 4 empty 'hat 0 empty 'hat 3 empty '... 'stop
Sub subtotal() ' define two strings and a subtotal counter thingy Dim thisOne, thatOne As String Dim subCount As Double ' seed the values thisOne = ActiveCell.Value thatOne = ActiveCell.Offset(1, 0) subCount = 0 ' setup a loop that will go until it reaches a stop value While (ActiveCell.Value <> "stop") ' compares a cell value to the cell beneath it. If (thisOne = thatOne) Then ' if the cells are equal, the line count is added to the subcount subCount = subCount + ActiveCell.Offset(0, 1).Value Else ' if the cells are not equal, the subcount is written, and subtotal reset. ActiveCell.Offset(0, 2).Value = ActiveCell.Offset(0, 1).Value + subCount subCount = 0 End If ' select the next cell down ActiveCell.Offset(1, 0).Select ' assign the values of the active cell and the one below it to the variables thisOne = ActiveCell.Value thatOne = ActiveCell.Offset(1, 0) Wend End Sub