Excel批量求和求助:每N行求和后跳过M行循环操作
解决Excel中“N行求和+M行跳过”循环计算问题
一、公式法
1. 适用于Excel 365/2021(动态数组)
假设目标数据在A列(从A1开始),直接在空白单元格(比如C1)粘贴以下公式,替换N和M为你的实际数值:
=LET( data,A:A, total_rows,COUNTA(data), cycle,N+M, start_rows,SEQUENCE(ROUNDUP(total_rows/cycle,0),,1,cycle), MAP(start_rows,LAMBDA(x,SUM(OFFSET(data,x-1,0,N,1)))) )
公式逻辑:
- 用
LET定义变量简化结构 start_rows自动生成每个求和块的起始行号,步长为「求和行数+跳过行数」MAP遍历每个起始行,通过OFFSET提取对应N行数据并求和
2. 兼容旧版Excel(非动态数组)
拿N=3、M=2举例,数据在A列,在C1输入公式后下拉填充:
=IF(ROW(A1)*(3+2)-4>COUNTA(A:A),"",SUM(OFFSET(A$1,(ROW(A1)-1)*(3+2),0,3,1)))
替换公式里的3和2为你的N、M值即可。公式会自动判断是否超出数据范围,超出时显示空值。
二、VBA宏方法(超大型数据集首选,效率更高)
- 按下
Alt+F11打开VBA编辑器 - 右键左侧工程窗口,插入「模块」
- 粘贴以下代码,修改
N、M以及结果列的参数:
Sub SumNSkipM() Dim ws As Worksheet Dim lastRow As Long Dim currentRow As Long Dim sumRow As Long Dim N As Integer, M As Integer ' 按需修改参数 N = 3 ' 每次求和的行数 M = 2 ' 每次跳过的行数 Set ws = ActiveSheet ' 操作当前工作表 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 获取数据最后一行 sumRow = 1 ' 结果写入的起始行(比如C1就保持sumRow=1) currentRow = 1 Do While currentRow <= lastRow ' 计算N行求和,写入C列,可把"C"改成其他列标 ws.Cells(sumRow, "C").Value = Application.Sum(ws.Range(ws.Cells(currentRow, "A"), ws.Cells(currentRow + N - 1, "A"))) ' 跳转到下一个求和块的起始行 currentRow = currentRow + N + M sumRow = sumRow + 1 Loop End Sub
- 按F5运行宏,或者回到Excel界面通过「开发工具」→「宏」执行
内容的提问来源于stack exchange,提问作者Jarno
相关产品推荐
相关产品推荐

