Как можно улучшить/поправить код на VBA?

Как рассчитать сумму 4 строк и вывести результат в ячейку рядом, если количество строк может составлять 10, 20, 30 и т. д.?
  • 23 января 2024 г. 21:20
Ответы на вопрос 1
Для начала нужно понять, каким образом вы рассчитываете сумму 4 строк. Если вы хотите суммировать каждые 4 строки в каком-то диапазоне и выводить результаты в ячейки рядом, то вы можете использовать следующий код VBA:

```vba
Sub SumEveryFourRows()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Замените "Sheet1" на имя вашего листа
    
    Dim startRow As Long
    Dim endRow As Long
    Dim sumCol As Long
    Dim outputCol As Long
    
    startRow = 1 ' Начальная строка
    sumCol = 1 ' Столбец, в котором находятся числа для суммирования
    outputCol = 2 ' Столбец, в который вы хотите добавить суммы. Можно настроить как нужно.
    
    Dim i As Long
    Dim sum As Double
    For i = startRow To ws.Cells(ws.Rows.Count, sumCol).End(xlUp).Row Step 4
        ' Суммируем каждые 4 строки
        sum = Application.Sum(ws.Cells(i, sumCol), ws.Cells(i + 1, sumCol), ws.Cells(i + 2, sumCol), ws.Cells(i + 3, sumCol))
        ' Записываем сумму в ячейку рядом
        ws.Cells(i, outputCol).Value = sum
    Next i
End Sub
```

Теперь, если вы хотите, чтобы код автоматически определял количество строк и суммировал каждые 4 строки, не превышая общее количество, напишем код так, чтобы он только проводил вычисление, пока существует 4 строки для суммирования:

```vba
Sub SumEveryFourRowsDynamic()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Замените "Sheet1" на имя вашего листа
    
    Dim startRow As Long
    Dim endRow As Long
    Dim sumCol As Long
    Dim outputCol As Long
    Dim groupSize As Integer
    
    startRow = 1 ' Начальная строка
    endRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' Последняя строка с данными
    sumCol = 1 ' Столбец, в котором находятся числа для суммирования
    outputCol = 2 ' Столбец, куда будут записываться суммы
    groupSize = 4 ' Размер группы строк для суммирования
    
    Dim i As Long
    Dim sum As Double
    For i = startRow To endRow Step groupSize
        If (i + groupSize - 1) <= endRow Then ' Проверяем, что группы из 4 строк существуют
            sum = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(i, sumCol), ws.Cells(i + groupSize - 1, sumCol)))
            ws.Cells(i, outputCol).Value = sum
        End If
    Next i
End Sub
```

Этот код сначала определяет начальную и конечную строку (определяя, где в данном столбце заканчиваются данные), затем проходит по каждой группе из четырех строк и суммирует их значения, записывая результат суммы в ячейку в указанном результирующем столбце рядом. Обратите внимание, что мы проверяем, что группы из четырех строки существуют перед суммированием, чтобы избежать ошибок, если строк меньше, чем нужно для полной группы в конце диапазона.
Похожие вопросы