VBA连续求和循环需求:多轮重置求和至指定值后标记
VBA实现分段累加达标标记循环逻辑
嘿,看了你描述的需求——要对N列的数值逐行累加,每次凑够设定值就在对应行的M列标记内容,然后立刻重置累加器从头开始算下一段,对吧?我给你调整了代码,完全匹配这个分段循环的逻辑,还加了注释方便你按需修改:
核心逻辑说明
- 初始化一个累加器,从0开始
- 逐行遍历N列的数值,不断累加到累加器中
- 每当累加值达到(或超过)设定的目标值时,在当前行的M列写入标记内容,然后把累加器重置为0,开启下一轮累加
- 重复这个过程直到遍历完所有数据
完整可运行代码
Sub SegmentSumMarker() Dim ws As Worksheet Dim targetTotal As Double ' 你需要设定的目标求和值 Dim runningTotal As Double ' 当前累加的总和 Dim lastDataRow As Long ' N列最后一行的行号 Dim rowIndex As Long ' ====== 这里是需要你根据实际情况修改的参数 ====== Set ws = ThisWorkbook.Worksheets("你的工作表名") ' 替换成你的工作表名称 targetTotal = 5 ' 替换成你需要的目标求和值(比如你的示例都是1,设5就每5行标记一次) Dim sumColumn As Integer: sumColumn = 14 ' N列对应的列号(N是第14列,按需修改) Dim markColumn As Integer: markColumn = 13 ' M列对应的列号(M是第13列,按需修改) ' ============================================== runningTotal = 0 ' 获取N列最后一行的行号(自动识别数据范围) lastDataRow = ws.Cells(ws.Rows.Count, sumColumn).End(xlUp).Row ' 从第2行开始遍历(假设第1行是表头,如果没有表头就改成rowIndex = 1) For rowIndex = 2 To lastDataRow ' 累加当前行N列的数值 runningTotal = runningTotal + ws.Cells(rowIndex, sumColumn).Value ' 判断是否达标 If runningTotal >= targetTotal Then ' 在M列写入你需要的内容,比如"已达标" ws.Cells(rowIndex, markColumn).Value = "已达标" ' 重置累加器,准备下一轮求和 runningTotal = 0 End If Next rowIndex MsgBox "分段标记任务完成!", vbInformation End Sub
关键调整点提示
- 参数替换:一定要把代码里的工作表名、目标值、列号改成你实际使用的
- 表头处理:如果你的数据没有表头,把
rowIndex = 2改成rowIndex = 1 - 精确匹配:如果需要累加值刚好等于目标值才标记,把
>=改成=即可(注意如果数值相加无法刚好等于目标值,可能会出现最后一段永远不标记的情况,按需选择)
举个例子,用你提供的示例数据(所有SIZE of INV都是1),如果把targetTotal设为5,那么第5行、第10行的M列会被标记为“已达标”,第6行、第11行开始重新从0累加,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者Filip Ondo
相关产品推荐
相关产品推荐

