Лучший способ получить итоговые данные по нескольким столбцам с различными размерами строк с помощью MS Excel VBA

#excel #vba #sum #formula

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

Вопрос:

У меня есть сотни столбцов (фиксированных) и различное количество строк в зависимости от извлечения данных. У меня есть код, который вводит итоговую формулу в последней строке плюс один. Это работает хорошо. Но у меня так много столбцов, которые мне нужно суммировать. Скажем, для каждого столбца в диапазоне H: EA требуется общая сумма.

Мне нужна более эффективная формула, чем приведенная ниже, но я не уверен, к чему обратиться:

 Sheet2.Range("A1").End(xlDown).Offset(1, 25).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Sheet2.Range("A1").End(xlDown).Offset(1, 26).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Sheet2.Range("A1").End(xlDown).Offset(1, 27).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Sheet2.Range("A1").End(xlDown).Offset(1, 28).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Sheet2.Range("A1").End(xlDown).Offset(1, 28).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Sheet2.Range("A1").End(xlDown).Offset(1, 29).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
Sheet2.Range("A1").End(xlDown).Offset(1, 30).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
  

и т.д. и т.п.

Ответ №1:

Вы можете использовать Range.Resize для записи формулы в несколько столбцов за один шаг:

 Sheet2.Range("A1").End(xlDown).Offset(1, 25).Resize(, 7).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
  

Скажем, для каждого столбца в диапазоне H: EA требуется общая сумма

Обратите внимание, что обычный подход заключается в использовании End(xlUp) для поиска последней строки, и вы можете легко создать ссылку на диапазон вместо использования Resize :

 With Sheet2
    Dim lastRow As Long
    lastRow = .Cells(.Rows.Count, "H").End(xlUp).Row   1

    .Range("H" amp; Row amp; ":EA" amp; lastRow).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
End With
  

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

1. должно быть lastRow для квалификатора столбца H (не строки). Спасибо BigBen. Вы уже дважды помогли мне сейчас.