使用 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 个字符串,它们总是相同的 @Meisje17 If Cell = "Your String1" Or Cell = "Your String2" Then GoTo NextCell 并在Next Cell 上方写一行NextCell:

以上是关于使用 excel vba 宏将总和扩展到动态范围的主要内容,如果未能解决你的问题,请参考以下文章

打开多个 Excel 实例时如何通过 Excel 宏将数据从 Excel 导出到 Access

Excel VBA:自动填充动态范围错误

VBA Excel小计动态范围不起作用

Excel VBA将组合框列表从静态范围更改为动态范围

Excel vba总和公式[复制]

Excel VBA 宏后期绑定