You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VBA实现从F列到AM列的动态列底求和?

批量对F到AM列添加底部求和(VBA实现)

问题背景

原代码仅能对F列计算求和并放置在列底部,需要修改为循环处理F到AM的所有列。

修改后的完整代码(通用版,适配每列行数不同的情况)

Sub SumColumns()
    Dim ws As Worksheet
    Dim col As Integer
    Dim lastRow As Long
    Dim sumRange As Range
    
    ' 指定目标工作表
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 循环遍历F列(第6列)到AM列(第39列)
    For col = 6 To 39
        ' 获取当前列的最后非空行号
        lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
        
        ' 定义求和范围:从第5行到当前列最后非空行(可自行调整起始行)
        Set sumRange = ws.Range(ws.Cells(5, col), ws.Cells(lastRow, col))
        
        ' 把求和结果放在当前列最后非空行的下两行位置
        ws.Cells(lastRow + 2, col).Value = Application.WorksheetFunction.Sum(sumRange)
    Next col
End Sub

适配原逻辑的版本(所有列行数与E列一致)

如果所有数据列行数都和E列对齐,可沿用原代码的行号判断逻辑,仅增加列循环:

Sub SumColumns()
    Dim ws As Worksheet
    Dim col As Integer
    Dim lastRow As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 沿用原逻辑:取E列最后非空行号并减1
    lastRow = ws.Cells(ws.Rows.Count, 5).End(xlUp).Row - 1
    
    ' 循环处理F到AM列
    For col = 6 To 39
        ' 求和范围:当前列第5行到lastRow-1行
        ws.Cells(lastRow + 2, col).Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(5, col), ws.Cells(lastRow - 1, col)))
    Next col
End Sub

关键改动说明

  • 列循环:用For col = 6 To 39遍历目标列,其中6对应F列,39对应AM列(若需更直观,可替换为ws.Columns("F").Column到ws.Columns("AM").Column)
  • 工作表变量:引入ws变量减少重复代码调用,提升运行效率
  • 行号适配:通用版会单独计算每列的最后非空行,避免因列数据行数不同导致的错误;适配版则沿用原逻辑,适合数据对齐的场景
  • 可调整参数:求和起始行(代码中第5行)、结果放置位置(最后行+2)可根据实际需求修改

内容的提问来源于stack exchange,提问作者Fred Blair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:35:07