使用 excel vba 宏将总和扩展到动态范围
extend sum to dynamic range with excel vba macro
我正在尝试将求和公式扩展到动态范围。总和包括从第 5 行到列中倒数第二个使用的行的所有值,然后总和在最后使用的行中。但是,行数和列数各不相同,唯一不变的是总和应始终从第 5 行开始。总和也始终从 C 列开始。我已经设法编写了一个宏,将总和放在C 列的最后一行。我现在正在处理一个宏,将此总和扩展到 sheet 中所有其他使用的列,但最后一列除外(包含另一个值而不是总和)。
我正在与 selection.autofill 合作。但是,我在声明要填充的范围时遇到问题。 VBA 给我一个“预期的:语句结束”错误,我不知道为什么。有人可以向我解释我做错了什么吗?有没有比 selection.autofill 更好的方法 - 我担心它可能不会接管列,例如当扩展到 D 列中的单元格时实际上总结 D 列?
这是我已有的:
'
' sumtest Macro
'
'
Dim Cell As Range, sRange As Range
Dim wsDestination As Worksheet
With ThisWorkbook
Set wsDestination = .Worksheets("Overview")
End With
FirstRow = Rows(5).EntireRow
lastRow = wsDestination.Cells(Rows.Count, "A").End(xlUp).Row
LastRow1 = wsDestination.Cells(Rows.Count, "A").End(xlUp).Row
LastColumn1 = wsDestination.Cells(4, wsDestination.Columns.Count).End(xlToLeft).Column
Worksheets("Overview").Select
wsDestination.Cells(lastRow, "C").Select
ActiveCell.Formula = "=SUM(C5:C" & lastRow - 1 & ")"
Range(wsDestination.Cells(LastRow1, 3)).Select
Selection.AutoFill Destination:=Range(wsDestination.Cells(LastRow1,3),wsDestination.Cells(LastRow1,LastColumn -1)) Type:=xlFillDefault
End Sub
此代码将在最后一行的每一列中写入总和的 值:
Option Explicit
Sub Sumtest()
With ThisWorkbook.Sheets("Overview")
Dim LastCol As Long: LastCol = .Cells(4, .Columns.Count).End(xlToLeft).Column
Dim Cell As Range
Dim LastRow As Long
For Each Cell In .Range("C4", .Cells(4, LastCol))
LastRow = .Cells(.Rows.Count, Cell.Column).End(xlUp).Row
.Cells(LastRow, Cell.Column) = Application.Sum(.Range(Cell.Offset(1), .Cells(LastRow - 1, Cell.Column)))
Next Cell
End With
End Sub
请注意,代码将检查每一列的 LastRow
,因此如果列的行数不同,则总计将位于第一行,每列没有数据。
我正在尝试将求和公式扩展到动态范围。总和包括从第 5 行到列中倒数第二个使用的行的所有值,然后总和在最后使用的行中。但是,行数和列数各不相同,唯一不变的是总和应始终从第 5 行开始。总和也始终从 C 列开始。我已经设法编写了一个宏,将总和放在C 列的最后一行。我现在正在处理一个宏,将此总和扩展到 sheet 中所有其他使用的列,但最后一列除外(包含另一个值而不是总和)。 我正在与 selection.autofill 合作。但是,我在声明要填充的范围时遇到问题。 VBA 给我一个“预期的:语句结束”错误,我不知道为什么。有人可以向我解释我做错了什么吗?有没有比 selection.autofill 更好的方法 - 我担心它可能不会接管列,例如当扩展到 D 列中的单元格时实际上总结 D 列? 这是我已有的:
'
' sumtest Macro
'
'
Dim Cell As Range, sRange As Range
Dim wsDestination As Worksheet
With ThisWorkbook
Set wsDestination = .Worksheets("Overview")
End With
FirstRow = Rows(5).EntireRow
lastRow = wsDestination.Cells(Rows.Count, "A").End(xlUp).Row
LastRow1 = wsDestination.Cells(Rows.Count, "A").End(xlUp).Row
LastColumn1 = wsDestination.Cells(4, wsDestination.Columns.Count).End(xlToLeft).Column
Worksheets("Overview").Select
wsDestination.Cells(lastRow, "C").Select
ActiveCell.Formula = "=SUM(C5:C" & lastRow - 1 & ")"
Range(wsDestination.Cells(LastRow1, 3)).Select
Selection.AutoFill Destination:=Range(wsDestination.Cells(LastRow1,3),wsDestination.Cells(LastRow1,LastColumn -1)) Type:=xlFillDefault
End Sub
此代码将在最后一行的每一列中写入总和的 值:
Option Explicit
Sub Sumtest()
With ThisWorkbook.Sheets("Overview")
Dim LastCol As Long: LastCol = .Cells(4, .Columns.Count).End(xlToLeft).Column
Dim Cell As Range
Dim LastRow As Long
For Each Cell In .Range("C4", .Cells(4, LastCol))
LastRow = .Cells(.Rows.Count, Cell.Column).End(xlUp).Row
.Cells(LastRow, Cell.Column) = Application.Sum(.Range(Cell.Offset(1), .Cells(LastRow - 1, Cell.Column)))
Next Cell
End With
End Sub
请注意,代码将检查每一列的 LastRow
,因此如果列的行数不同,则总计将位于第一行,每列没有数据。