Как ввести формулу справа от последней строки

#excel #vba #excel-formula

#excel #vba #excel-формула

Вопрос:

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

 lastrow = Cells(Rows.Count, "C").End(xlUp).Row   1
Cells(lastrow   1, 3).Formula = "=sum(C1:C" amp; lastrow amp; ")"
lastrow = Cells(Rows.Count, "D").End(xlUp).Row   1
Cells(lastrow   1, 4).Formula = "=sum(D1:D" amp; lastrow amp; ")"
  

Как я могу вставить формулу справа от других моих промежуточных итогов (выделено желтым), поскольку они мне нужны все в одной строке?

Таблица

Комментарии:

1. Вы можете либо использовать OffSet , либо, поскольку у вас уже есть строка, в которую вы хотите ввести итоговые данные, просто увеличьте значение столбца в: Cells(lastrow 1, 4).Formula . Итак, чтобы задать значение для столбца E : Cells(lastrow 1, 5).Formula . Что еще более важно, откуда вы знаете, сколько столбцов нужно в сумме? Если столбцы будут статическими, у вас может быть FOR цикл для заполнения значений. Если они динамические, вам нужно будет получить количество столбцов

Ответ №1:

Просто используйте один столбец для определения последней строки (используя Column A здесь)

Кроме того, нижняя часть вашего диапазона сумм обозначается последней строкой ( LR ), но то, куда вы хотите поместить свои формулы, находится на 2 строки ниже (отсюда LR 2 )


 Dim ws as Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update
Dim LR as Long

LR = ws.Range("A" amp; ws.Rows.Count).End(xlUp).Row

ws.Range("C" amp; LR   2).Formula = "=Sum(C2:C" amp; LR amp; ")"
ws.Range("D" amp; LR   2).Formula = "=Sum(D2:D" amp; LR amp; ")"
  

Комментарии:

1. Возможно, стоит просто добавить 2 , когда вы получите количество строк. Тогда вам не нужно 2 каждый раз добавлять формулу

2. Затем вам нужно использовать LR - 2 при выполнении формулы. Или можно задать другую переменную с помощью LR - 2 . В любом случае, переменная используется для определения двух отдельных местоположений здесь (диапазон сумм и расположение формулы на листе), поэтому она не заканчивается просто настройкой LR.Offset(2) . Этот способ показался более интуитивным. Если бы было намного больше кода, которому нужно следовать, я бы обосновал вторую переменную, возможно

3. @urdearboy вы могли бы записать все формулы в одной строке: ws.Range("C" amp; LR 2 amp; ":J" amp; LR 2).Formula = "=Sum(C2:C" amp; LR amp; ")"

4. Блестяще! Я знал, что это что-то простое, я просто слишком много думал об этом. Спасибо!

Ответ №2:

Попробуйте:

 Option Explicit

Sub test()

    Dim LastRow As Long, LastColumn As Long, Column As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        For Column = 3 To 10
            .Cells(LastRow   2, Column) = Application.WorksheetFunction.Sum(.Range(.Cells(2, Column), Cells(LastRow, Column)))
        Next Column

    End With

End Sub
  

Комментарии:

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

2. Кроме того, если вы внесете изменения и снова запустите код, у вас возникнет проблема с вычислением последней строки.