需编写公式:按跳过数与求和数对15列换行单元格数组求和
跨行排列单元格的跳过求和实现
针对你这种按左到右、从上到下排列(每行15个单元格)的数组,要实现跳过指定数量单元格后对后续单元格求和,核心是把线性的“跳过/求和数量”转换成二维单元格区域的位置,或者直接将二维数组转为一维数组后截取区间求和。
方法1:Excel 365及以上版本(用TOCOL转一维数组)
这种方法最直观,先把二维数据区域转为一维数组,再截取跳过指定数量后的目标区间求和:
- 定义几个关键参数:
skip_num:需要跳过的单元格数量(比如你的例子中是61)sum_num:需要求和的单元格数量(比如你的例子中是5)cols_per_row:每行的单元格数(固定为15)start_cell:数据区域的起始单元格(比如你的例子中是A1)
- 公式示例:
=SUM(INDEX(TOCOL(start_cell:INDEX(start_cell, 1000, cols_per_row)), skip_num+1):INDEX(TOCOL(start_cell:INDEX(start_cell, 1000, cols_per_row)), skip_num+sum_num))
- 解释:
TOCOL函数把二维的单元格区域按左到右、从上到下的顺序转为一维数组;INDEX定位到跳过skip_num个后的起始位置和结束位置,最后用SUM求和。 - 优化:如果想自动识别数据的最后一行,可改用
LET函数简化:
=LET( total_cells, COUNTA(start_cell:INDEX(start_cell, 1000, cols_per_row)), total_rows, ROUNDUP(total_cells/cols_per_row, 0), data_range, start_cell:INDEX(start_cell, total_rows, cols_per_row), linear_array, TOCOL(data_range), SUM(INDEX(linear_array, skip_num+1):INDEX(linear_array, skip_num+sum_num)) )
方法2:兼容旧版Excel(不用TOCOL)
如果你的Excel版本不支持TOCOL,可以通过计算行号和列号来定位起始/结束单元格:
- 计算起始单元格的行号和列号:
- 起始行:
ROW(start_cell) + INT(skip_num / cols_per_row) - 起始列:
COLUMN(start_cell) + MOD(skip_num, cols_per_row)
- 起始行:
- 计算结束单元格的行号和列号:
- 结束行:
ROW(start_cell) + INT((skip_num + sum_num - 1) / cols_per_row) - 结束列:
COLUMN(start_cell) + MOD(skip_num + sum_num - 1, cols_per_row)
- 结束行:
- 公式示例:
=SUM(INDEX(start_cell:INDEX(start_cell, 1000, cols_per_row), ROW(start_cell)+INT(skip_num/cols_per_row), COLUMN(start_cell)+MOD(skip_num, cols_per_row)):INDEX(start_cell:INDEX(start_cell, 1000, cols_per_row), ROW(start_cell)+INT((skip_num+sum_num-1)/cols_per_row), COLUMN(start_cell)+MOD(skip_num+sum_num-1, cols_per_row)))
- 解释:通过
INT和MOD函数把线性的跳过数量转换成二维的行/列坐标,再用INDEX定位区域后求和。
你的例子验证
假设你的数据起始单元格是A1,skip_num=61,sum_num=5,cols_per_row=15:
- 跳过61个单元格后,起始位置是第62个单元格:
INT(61/15)=4,MOD(61,15)=1,对应行号1+4=5,列号1+1=2(即B5);结束位置是第66个单元格:INT((61+5-1)/15)=INT(65/15)=4,MOD(65,15)=5,对应行号1+4=5,列号1+5=6(即F5),求和B5:F5。
如果你的例子中实际是A2到A6求和,可能是数据起始单元格为A2,或者跳过数量的定义是从A2开始计数,调整参数即可适配。
内容的提问来源于stack exchange,提问作者solexious
相关产品推荐
相关产品推荐

