2017-02-10 20 views
1

Итак, у меня есть набор данных, которые обновляются ежемесячно. На электронной таблице данные группируются в блоки строк с строкой для промежуточного итога после каждого блока и строкой внизу, которая суммирует все подтаблицы.Добавление суммы к каждой строке, которая соответствует сумме

Я хочу, чтобы добавить код так, что данные суммируются в строке, где он говорит: «Промежуточный итог», путем добавления всех вышеуказанных строк до предыдущей строки, которая говорит «Подитог»

Например

Очистка 8000
Подметающая 2000
Подстилка 5000
SUB ИТОГО 15000 < --- сумма трех выше
Гудронная 6000
Асфальтовая 3000
Фрезерование 5000
SUB ВСЕГО 14000 < --- сумма из щебня, асфальта и фрезерования
ИТОГО 29000 < --- сумма суммарной суммы

ПОМОЩЬ!

+0

Мы действительно не можем помочь, не зная, какую часть вашего кода/формула дает вам проблемы. (Если, возможно, ваша «ПОМОЩЬ!» Не будет интерпретироваться как «Кто-то, пожалуйста, сделайте это для меня, чтобы я мог просто расслабиться и расслабиться».) – YowE3K

+0

Вы частично правильно вывели «Справка». Я еще не написал правильную кодировку. Я устанавливаю длинный, который находит строку, содержащую «sub total», но тогда я не знаю, как закодировать диапазон, который будет получать значения между двумя строками, которые говорят «sub total», а затем переходит к следующей строке с «sub total» в нем. – gourdblessamerica

+0

ИМО было бы лучше всего установить переменную, действующую как промежуточный итог, а другой - как итог. Петля через каждую строку и либо (1), если она не является «СУБТОГО», или «ВСЕГО», добавьте значение из строки в обе переменные или (2), если это «СУБЪЕМОГО», выпишите в строку subtotal, а затем установите свою промежуточную переменную равной нулю или (3), если она «TOTAL» выписывает в строку общую переменную. – YowE3K

ответ

0

Просьба кода, опубликованного. Я предполагаю, что ваши описания предметов находятся в столбце «А», а ваши затраты указаны в столбце «В». То, что он делает, заключается в том, чтобы поместить косвенную сумму в столбец «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 

Хорошая вещь о делать это таким образом, что вы можете вставить дополнительные строки в каждый из сегментов субтотальных или добавление новых промежуточных итогов сегментов, запустите макрос, и он должен показать соответствующие новые суммы.

Это работает для меня, но я просто попробовал его с предоставленными вами данными. Обратите внимание, что для этого нужно иметь регулярные выражения.

+0

Я получаю сообщение об ошибке в последней строке «Ячейки (thisrow + 1,2) ...» Даже после того, как я изменил ее, чтобы соответствовать моему листу. Это работает ошибка 1004, но, к сожалению, я понятия не имею, где редактировать, потому что я не работал с регулярным выражением или коллекций, прежде чем ... Я буду упорствовать, хотя, спасибо за это. – gourdblessamerica

+0

Я добавил значение в эту строку и обновил код выше - посмотрите, работает ли это. – Amorpheuses

+0

Все еще нет. :( – gourdblessamerica

0

Не беспокойтесь, ребята, я нашел более простой код, который проходит через каждую строку, ища «TOTAL» и добавляет формулу суммы в этой строке. Затем стартовая строка становится строкой ниже подстрочной строки, и процесс начинается снова.

В этом случае WS определяются как лист, firstRow и х являются целыми числами, lastrow длинного

firstRow = 4 
For x = 4 To lastRow 
    If ws.Range("C" & x) Like "*TOTAL*" Then 
     ws.Range("E" & x).Formula = "=sum(E" & firstRow & ":E" & x - 1 & ")" 
     firstRow = x + 1 
    End If 
Next x 

 Смежные вопросы

  • Нет связанных вопросов^_^