Excel VBA Sum Динамический диапазон Все листы - PullRequest
0 голосов
/ 01 января 2019

На каждом листе я хочу суммировать столбец A от A3 (нет пустых ячеек) и вставить сумму в первую пустую ячейку.

Приведенный ниже код прекрасно работает для sheet1, но значение суммы неверно для sheet2 и далее (в sheet2 сумма sheet1 удваивается, и это же значение вставляется в sheet3 и далее).

IБуду признателен, если вы укажете, что я делаю не так, пожалуйста?

Sub Sum_Dynamic_Rng()

Dim ws As Worksheet
Dim LastCell As Range

    For Each ws In ThisWorkbook.Worksheets


    Set LastCell = ws.Range("A3").End(xlDown).Offset(1, 0)

        LastCell.Formula = WorksheetFunction.Sum(Range(Range("A3"), Range("A3").End(xlDown)))

    Next ws

End Sub

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Колонка суммирования сверху

'*******************************************************************************
' Purpose:    In all worksheets starting from the specified first cell
'             of a contiguous column range, sums up its values and returns
'             the result a specified number of rows below.
'*******************************************************************************

Sub SumUpColumnFromAbove()

    Const cStrRange As String = "A3"  ' Cell Range Address
    Const cLngOffset As Integer = 2   ' Result Offset (1 for first row below)

    Dim i As Integer

    With ThisWorkbook
        For i = 1 To .Worksheets.Count
            With .Worksheets(i).Range(cStrRange).Cells(1, 1)
                ' Check if range has more than one cell (row) i.e.
                ' the cell below is not empty.
                If Not IsEmpty(.Offset(1, 0)) Then  ' More than one cell.
                    .End(xlDown).Offset(cLngOffset, 0) = WorksheetFunction _
                            .Sum(.Resize(.End(xlDown).Row - 1))
                  Else                              ' One cell only.
                    .Offset(cLngOffset, 0) = WorksheetFunction _
                            .Sum(.Parent.Range(cStrRange))
                End If
            End With
        Next
    End With

End Sub
'*******************************************************************************
0 голосов
/ 01 января 2019

Вы должны идентифицировать диапазоны на каждом рабочем листе, пока вы их просматриваете.

Sub Sum_Dynamic_Rng()

    Dim ws As Worksheet
    Dim LastCell As Range

    For Each ws In ThisWorkbook.Worksheets

        Set LastCell = ws.Range("A3").End(xlDown).Offset(1, 0)

        LastCell = WorksheetFunction.Sum(ws.Range(ws.Range("A3"), ws.Range("A3").End(xlDown)))

        'if you actually want a sum formula then,
        'LastCell.FormulaR1C1 = "=SUM(R3C:R[-1]C)"

    Next ws

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...