#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)
, с ).