Я постоянно делаю это с ВБА. Я уверен, что использовал тот же метод с офиса 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