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

通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:12:00