如何用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
相关产品推荐
相关产品推荐

