通过VBA计算指定范围内每行多列总和并填入对应行K列
问题原因与修正方案
核心错误点
- 列号常量定义错误:Excel列号规则为A=1,你代码中定义的列号与实际需求完全不匹配:原代码标注L列对应10(实际是J列)、X列对应22(实际是V列)、K列对应9(实际是I列),参数错误直接导致求和范围、写入位置都不符合要求。
- 结果写入逻辑位置错误:你将K列的赋值、格式设置代码放在了行遍历循环之外,只有循环结束后最后一行的计算结果会被写入,前面所有行的计算结果都被覆盖,没有保存。
- 存在无效冗余循环:
For Each cell In MyResultsRng完全无必要,每次循环中MyResultsRng都是单个K列单元格,不需要遍历。
修正后代码
Sub Sum_multiple_columns() Dim ws As Worksheet Dim destinationLastRow As Long, i As Long Dim TotalCoverage As Double Dim rng As Range ' 修正列号常量:A=1,L=12,X=24,K=11 Const FirstCol As Long = 12 ' 待求和起始列:L Const LastCol As Long = 24 ' 待求和结束列:X Const TotalCoverageColumn As Long = 11 ' 结果写入列:K Set ws = ThisWorkbook.Worksheets("Master") ' 按A列确定最后一行,若基准列为其他列可自行修改 destinationLastRow = ws.Range("A" & Rows.Count).End(xlUp).Row ' 可选:关闭屏幕更新提高大数量下的运行速度 ' Application.ScreenUpdating = False For i = 5 To destinationLastRow ' 定义当前行的求和范围 Set rng = ws.Range(ws.Cells(i, FirstCol), ws.Cells(i, LastCol)) ' 计算总和 TotalCoverage = Application.WorksheetFunction.Sum(rng) ' 写入当前行K列并设置格式 With ws.Cells(i, TotalCoverageColumn) .Value = TotalCoverage .HorizontalAlignment = xlCenter .Interior.Color = RGB(0, 112, 192) .Font.Color = RGB(255, 255, 255) .Font.Bold = True .Font.Size = 12 .Font.Name = "Calibri" .NumberFormat = "0.00" End With Next ' 恢复屏幕更新 ' Application.ScreenUpdating = True ' 释放对象 Set ws = Nothing Set rng = Nothing End Sub
补充说明
如果你的表格数据量超过1000行,建议取消代码中关闭屏幕更新的注释,可大幅提升运行速度。
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

