Суммирование динамического диапазона Excel VBA

#excel #vba

Вопрос:

Я пытаюсь суммировать значения во всем столбце, который не является фиксированным.

 Sub CTG()
Dim sht As Worksheet
Dim PreviousData As Long
Dim MySum As Double, ColLetter As String

Set sht = ThisWorkbook.Worksheets("Weekly")
PreviousData = sht.Cells(2, sht.Columns.Count).End(xlToLeft).Column - 1

ColLetter = Split(Cells(1, PreviousData).Address, "$")(1)
 

MySum = Application.WorksheetFunction.Sum(sht.Range("C:C"))

'MsgBox "The total of the ranges is " amp; MySum

End Sub
 

Что я пытаюсь сделать, так это обратить

 MySum = Application.WorksheetFunction.Sum(sht.Range("C:C"))
 

в

 MySum = Application.WorksheetFunction.Sum(sht.Range("ColLetter :ColLetter"))
 

и я пытался несколькими способами, но, похоже, это не работает.

Любая помощь была бы очень признательна. Спасибо

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

1. sht.Range(ColLetter amp; ":" amp; ColLetter) . Или sht.Columns(PreviousData) .

2. Или вы можете использовать табличные и структурированные ссылки; или добавить строку Итогов в таблицу. Вам даже не нужно использовать VBA, хотя вы могли бы это сделать.

Ответ №1:

Сумма столбца

  • Ниже суммируются значения в столбце перед последним непустым столбцом, вычисленным во второй строке.
  • Ты должен это знать Columns("C") = Columns(3) = Range("C:C") .
 Option Explicit

Sub SumOfColumn()
    
    Dim MySum As Double
    With ThisWorkbook.Worksheets("Weekly")
        Dim blCol As Long ' Column Before the Last Column
        blCol = .Cells(2, .Columns.Count).End(xlToLeft).Column - 1
        If blCol = 0 Then
            MsgBox "There is no column before column ""A"".", _
                vbCritical, "Sum of Column"
            Exit Sub
        End If
        MySum = Application.Sum(.Columns(blCol))
    End With
    
    MsgBox "The column's total is '" amp; MySum amp; "'.", _
        vbInformation, "Sum of Column"

End Sub
 
  • Это было рассмотрено Бигбеном в комментариях ( sht.Columns(PreviousData) например sht.Columns(3) , с ).