问题描述
我正在尝试将求和公式扩展到动态范围。该总和包括从第5行到该列中倒数第二个最后使用的行的所有值,然后总和位于最后一个使用的行中。但是,行和列的数量各不相同,唯一保持不变的是总和应始终从第5行开始。总和也总是始于C列。我已经设法编写了一个宏,将总和放入C列的最后一行。我现在正在处理一个宏,该宏将该和扩展到工作表中所有其他已使用的列,除了最后一列(该列包含另一个值而不是和)。 我正在使用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
,因此,如果列的行数不同,则总数将位于第一行,而没有每一列的数据。