使用 excel vba 宏将总和扩展到动态范围
Posted
技术标签:
【中文标题】使用 excel vba 宏将总和扩展到动态范围【英文标题】:extend sum to dynamic range with excel vba macro 【发布时间】:2020-09-15 09:23:54 【问题描述】:我正在尝试将求和公式扩展到动态范围。总和包括从第 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
【问题讨论】:
你需要它成为一个正式的吗?可以只是总和的值吗? 【参考方案1】:此代码将在最后一行的每一列中写入总和的值:
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
,因此如果各列的行数不同,则总计将位于第一行,每列没有数据。
【讨论】:
嗨 Damian,谢谢,代码运行良好。我现在需要排除不需要总和的列。这些列的位置也各不相同,但是它们在第 4 行中包含某些字符串。你能给我一个关于如何处理这个问题的提示吗?用 if 语句? if 语句应该封装循环还是其他方式? @Meisje17 有很多字符串吗?他们有一些共同的模式吗? 它的 2 个字符串,它们总是相同的 @Meisje17If Cell = "Your String1" Or Cell = "Your String2" Then GoTo NextCell
并在Next Cell
上方写一行NextCell:
以上是关于使用 excel vba 宏将总和扩展到动态范围的主要内容,如果未能解决你的问题,请参考以下文章