【问题标题】:VBA - Want to put the sum result at the bottom automaticallyVBA - 想要自动将总和结果放在底部
【发布时间】:2020-07-31 13:05:12
【问题描述】:

我需要将总和的结果放在不同工作表的最后一列的末尾(列数和行数不一样)

我需要修复代码的最后一部分才能让它发生。

这是代码(我在代码中标出了什么不起作用):

Sub Sum_Dynamic_Rng()

Dim ws As Worksheet
Dim LastCell As Range
    
Dim ColumnNumber As Long
Dim ColumnLetter As String



ColumnNumber = Range("S3").End(xlToLeft).Column

ColumnLetter = Split(Cells(1, ColumnNumber).Address, "$")(1)


    For Each ws In ThisWorkbook.Worksheets

        Set LastCell = ws.Range(ColumnLetter & 2).End(xlDown).Offset(1, 0)
        
   

        **LastCell = WorksheetFunction.Sum(ws.Range(ws.Range(ColumnLetter & 2), ws.Range(ColumnLetter & 2).End(xlDown)))**


    Next ws

End Sub

【问题讨论】:

标签: excel vba sum row multiple-columns


【解决方案1】:

你的代码有两个错误

  1. 您在第一张表中搜索“LastCell”只是因为它位于 FOR 循环之前。电子表格的尺寸与您编写的不同,因此我将搜索移至循环,以便对每次迭代进行重新检查。
  2. 另一个(在我看来)问题是重新启动,它把之前的计算加起来了。 例如。 2 + 2 = 4, 2 + 2 + 4 = 8, 2 + 2 + 4 + 8 = 16 等

我的代码是:

Sub Sum_Dynamic_Rng()

Dim ws As Worksheet
Dim LastCell As String  'I changed from Range to String
Dim ColumnNumber As Long
Dim ColumnLetter As String

    For Each ws In ThisWorkbook.Worksheets
    
        LastColumnNumber = ws.Range("s3").End(xlToLeft).Column
        LastColumnLetter = Split(Cells(1, LastColumnNumber).Address, "$")(1)
        LastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row

        LastCell = LastColumnLetter & LastRow + 1 ' (+1) - last but not the first empty
   
     ws.Range(LastCell) = WorksheetFunction.Sum(ws.Range(ws.Range(LastColumnLetter & 2), ws.Range(LastColumnLetter & LastRow)))
     ws.Range(LastCell).Interior.ColorIndex = 43   ''I added for better visualization
    Next ws

End Sub

如果您对答案感到满意,请给我一个答案加分并关闭主题,除非您有任何问题。 :)

【讨论】:

    【解决方案2】:

    没关系,我做了一些更改,现在可以正常工作了!

    Sub Sum_Dynamic_Rng()

    将 ws 调暗为工作表 Dim LastCell As String '我从 Range 更改为 String 将 ColumnNumber 变暗 将 ColumnLetter 作为字符串调暗

    For Each ws In ThisWorkbook.Worksheets
    
        LastColumnNumber = ws.Range("s3").End(xlToLeft).Column
        LastColumnLetter = Split(Cells(1, LastColumnNumber).Address, "$")(1)
        LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ***''REPLACE TO A FROM G IN THIS LINE***
    
        LastCell = LastColumnLetter & LastRow + 1 ' (+1) - last but not the first empty
    
     ws.Range(LastCell) = WorksheetFunction.Sum(ws.Range(ws.Range(LastColumnLetter & 2), ws.Range(LastColumnLetter & LastRow)))
     ws.Range(LastCell).Interior.ColorIndex = 43   ''I added for better visualization
    Next ws
    

    结束子

    【讨论】:

    • 如果您对答案感到满意,请给我从答案中加分并关闭主题,除非您有任何问题。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2020-11-16
    • 2017-06-02
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多