Я делаю это все время с VBA. Я почти уверен, что использовал тот же метод, начиная с Office 95 ', с небольшими изменениями, внесенными для размещения столбцов. Это может быть сделано с меньшим количеством строк, если вы не определяете переменные. Это может быть сделано быстрее, если у вас есть много строк, чтобы пройти или больше вещей, с которыми вам нужно определить свою группу.
Я сталкивался с ситуациями, когда «группа» основана на 2-5 ячейках. Этот пример рассматривает только один столбец, но его можно легко развернуть, если кто-то найдет время поиграть с ним.
Это предполагает 3 столбца, и вы должны сортировать по столбцу group_values.
Перед запуском макроса выберите первую ячейку для сравнения в столбце group_values.
'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