Просьба кода, опубликованного. Я предполагаю, что ваши описания предметов находятся в столбце «А», а ваши затраты указаны в столбце «В». То, что он делает, заключается в том, чтобы поместить косвенную сумму в столбец «B», смежный с каждой найденной им строкой SUB TOTAL (набрал этот способ, игнорируя случай). Я также предполагаю, что значения начинаются в строке 1, которые вы, вероятно, не захотите сделать. Я накапливаю строку суммы и помещаю ее в строку сразу после последней промежуточной строки, которую я нахожу. Каждой промежуточной ячейке будет предоставлен голубой цветной фон и верхняя граница. Предположительно, вы сможете продолжить с этого момента и изменить его в соответствии с вашими потребностями.
Function findSubTotalRows(lastRow As Integer) As Collection
Dim regEx As New RegExp
Dim subTotCols As Collection
regEx.Global = True
regEx.IgnoreCase = True
regEx.Pattern = "^SUB TOTAL$"
Dim row As Integer
Dim val As String
Set subTotCols = New Collection
For row = 1 To lastRow:
val = Trim(Cells(row, 1).Value)
Set mat = regEx.Execute(val)
If mat.Count = 1 Then
subTotCols.Add row
End If
Next
Set findSubTotalRows = subTotCols
End Function
Sub sum_up_subtotals()
Dim lastRow As Integer
Dim cols As Collection
' Find last row in column and all sub total rows
lastRow = Range("A1000").End(xlUp).row
Set cols = findSubTotalRows(lastRow)
Dim prevRow As Integer: prevRow = 0
Dim numRng As Integer
Dim totStr As String: totStr = "=SUM("
For row = 1 To cols.Count:
thisRow = cols(row)
numRng = thisRow - prevRow - 1
With Cells(thisRow, 2)
.Formula = "=SUM(INDIRECT(ADDRESS(ROW()-" & CStr(numRng) & ",COLUMN())&"":""&ADDRESS(ROW()-1,COLUMN())))"
.Interior.Color = vbCyan
.NumberFormat = "$#,##0.00"
.Borders(xlEdgeTop).LineStyle = xlContinuous
End With
prevRow = thisRow
totStr = totStr & "B" & thisRow & ","
Next
totStr = Mid(totStr, 1, Len(totStr) - 1) & ")"
Cells(thisRow + 1, 2).value = totStr
End Sub
Хорошая вещь о делать это таким образом, что вы можете вставить дополнительные строки в каждый из сегментов субтотальных или добавление новых промежуточных итогов сегментов, запустите макрос, и он должен показать соответствующие новые суммы.
Это работает для меня, но я просто попробовал его с предоставленными вами данными. Обратите внимание, что для этого нужно иметь регулярные выражения.
Мы действительно не можем помочь, не зная, какую часть вашего кода/формула дает вам проблемы. (Если, возможно, ваша «ПОМОЩЬ!» Не будет интерпретироваться как «Кто-то, пожалуйста, сделайте это для меня, чтобы я мог просто расслабиться и расслабиться».) – YowE3K
Вы частично правильно вывели «Справка». Я еще не написал правильную кодировку. Я устанавливаю длинный, который находит строку, содержащую «sub total», но тогда я не знаю, как закодировать диапазон, который будет получать значения между двумя строками, которые говорят «sub total», а затем переходит к следующей строке с «sub total» в нем. – gourdblessamerica
ИМО было бы лучше всего установить переменную, действующую как промежуточный итог, а другой - как итог. Петля через каждую строку и либо (1), если она не является «СУБТОГО», или «ВСЕГО», добавьте значение из строки в обе переменные или (2), если это «СУБЪЕМОГО», выпишите в строку subtotal, а затем установите свою промежуточную переменную равной нулю или (3), если она «TOTAL» выписывает в строку общую переменную. – YowE3K