VBA循环计算需求:实现带权重的行内列值求和并输出
VBA实现动态行加权求和(B-F列乘权重后写入G列)
刚接触VBA想用循环实现这个需求完全没问题,我给你准备了可直接复用的代码,再逐部分解释清楚逻辑,方便你理解:
Sub CalculateWeightedSum() Dim lastRow As Long Dim i As Long, j As Long Dim weightFactors As Variant Dim totalSum As Double ' 定义B-F列对应的权重因子,顺序和B、C、D、E、F列一一对应 weightFactors = Array(0.2, 0.15, 0.3, 0.2, 0.15) ' 你可以根据实际需求修改这些数值 ' 动态获取数据最后一行(以B列为基准,适配表格更新后的行数) lastRow = Cells(Rows.Count, "B").End(xlUp).Row ' 从第2行开始遍历(默认第1行是表头,如果没有表头就改成i=1) For i = 2 To lastRow totalSum = 0 ' 每次循环重置求和变量 ' 遍历当前行的B-F列(对应列索引2到6) For j = 2 To 6 ' 累加:当前单元格值 × 对应权重 totalSum = totalSum + Cells(i, j).Value * weightFactors(j - 2) Next j ' 把计算结果写入当前行的G列(第7列) Cells(i, 7).Value = totalSum Next i MsgBox "加权求和计算完成!" End Sub
关键细节说明:
- 动态获取行数:
Cells(Rows.Count, "B").End(xlUp).Row会从B列最底部往上找第一个非空单元格的行号,不管表格怎么更新,都能准确抓到所有数据行。 - 权重灵活调整:
weightFactors数组的元素顺序和B-F列对应,直接修改数组里的数字就能调整各列权重,不用改循环逻辑。 - 容错优化(可选):如果担心单元格为空导致计算错误,可以给内层循环加个判断:
这样空单元格会被当作0处理,避免报错。If Not IsEmpty(Cells(i, j)) Then totalSum = totalSum + Cells(i, j).Value * weightFactors(j - 2) End If
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

