Excel 每 5 行求和的公式
Excel formula to Sum every 5 rows
我正在为 excel 公式苦苦挣扎:
需要: 我需要一个公式来对每 5 行求和 AND 将值放在相应的行上。 (见下文 table)
这是我目前拥有的,但还不完整:
=SUM(OFFSET($A,(ROW()-ROW($B))*5,,5,))
| A | B | C
-----------------------
1 | 5 | 37 | 37
2 | 10 | 24 | 37
3 | 7 | 17 | 37
4 | 7 | 0 | 37
5 | 8 | 0 | 37
6 | 1 | 0 | 24
7 | 3 | 0 | 24
8 | 5 | 0 | 24
9 | 5 | 0 | 24
10 | 10 | 0 | 24
11 | 5 | 0 | 17
12 | 1 | 0 | 17
13 | 8 | 0 | 17
14 | 2 | 0 | 17
15 | 1 | 0 | 17
列 "A" = 值
列 "B" = 当前输出(w/Formula 以上)
列 "C" = 所需输出
感谢您的帮助。
这是作弊,但是在B5中输入:
=IF(MOD(ROW(),5)=0,SUM(A1:A5),B6)
然后向上和向下复制此单元格:
B1 到 B4 中的公式无效,但生成正确的结果。
在B1
中输入这个公式:
=SUM(OFFSET($A,5*INT((ROW()-1)/5),,5))
和drag/copy它下来了。
在约 10K 行随机数上进行了测试,效果合理。
使用 INDEX 代替 OFFSET 的另一种方式
=SUM(INDEX(A:A,FLOOR(ROW()-1,5)+1):INDEX(A:A,FLOOR(ROW()-1,5)+5))
说明
FLOOR 函数采用第一个参数的值并将其向下舍入为第二个参数的最接近倍数。在第一个 INDEX 语句中,对于第 1-5 行,在 FLOOR 语句中从行号中减去 1 得到 0-4。 FLOOR 语句将所有这些值四舍五入为零,因此在加一后,前 5 行的每一行的值为 1。
第二个 INDEX 和 FLOOR 语句的工作方式相同,只是在末尾添加 5,前 5 行的值为 5。
INDEX returns一个引用,所以用INDEX(A:A,1):INDEX(A:A,5)得到A列的前5个单元格是有效的,然后就可以了对它们求和。
对于第 6-10 行,FLOOR 语句以相同的方式产生 5,因此在分别添加 1 和 5 之后,您将得到 A 列的单元格 6-10,依此类推。
Row() Row()-1 FLOOR(Row()-1) FLOOR(Row()-1)+1 Floor(Row()-1)+5
1 0 0 1 5
2 1 0 1 5
3 2 0 1 5
4 3 0 1 5
5 4 0 1 5
6 5 5 6 10
7 6 5 6 10
8 7 5 6 10
9 8 5 6 10
10 9 5 6 10
我正在为 excel 公式苦苦挣扎:
需要: 我需要一个公式来对每 5 行求和 AND 将值放在相应的行上。 (见下文 table)
这是我目前拥有的,但还不完整:
=SUM(OFFSET($A,(ROW()-ROW($B))*5,,5,))
| A | B | C
-----------------------
1 | 5 | 37 | 37
2 | 10 | 24 | 37
3 | 7 | 17 | 37
4 | 7 | 0 | 37
5 | 8 | 0 | 37
6 | 1 | 0 | 24
7 | 3 | 0 | 24
8 | 5 | 0 | 24
9 | 5 | 0 | 24
10 | 10 | 0 | 24
11 | 5 | 0 | 17
12 | 1 | 0 | 17
13 | 8 | 0 | 17
14 | 2 | 0 | 17
15 | 1 | 0 | 17
列 "A" = 值
列 "B" = 当前输出(w/Formula 以上)
列 "C" = 所需输出
感谢您的帮助。
这是作弊,但是在B5中输入:
=IF(MOD(ROW(),5)=0,SUM(A1:A5),B6)
然后向上和向下复制此单元格:
B1 到 B4 中的公式无效,但生成正确的结果。
在B1
中输入这个公式:
=SUM(OFFSET($A,5*INT((ROW()-1)/5),,5))
和drag/copy它下来了。
在约 10K 行随机数上进行了测试,效果合理。
使用 INDEX 代替 OFFSET 的另一种方式
=SUM(INDEX(A:A,FLOOR(ROW()-1,5)+1):INDEX(A:A,FLOOR(ROW()-1,5)+5))
说明
FLOOR 函数采用第一个参数的值并将其向下舍入为第二个参数的最接近倍数。在第一个 INDEX 语句中,对于第 1-5 行,在 FLOOR 语句中从行号中减去 1 得到 0-4。 FLOOR 语句将所有这些值四舍五入为零,因此在加一后,前 5 行的每一行的值为 1。
第二个 INDEX 和 FLOOR 语句的工作方式相同,只是在末尾添加 5,前 5 行的值为 5。
INDEX returns一个引用,所以用INDEX(A:A,1):INDEX(A:A,5)得到A列的前5个单元格是有效的,然后就可以了对它们求和。
对于第 6-10 行,FLOOR 语句以相同的方式产生 5,因此在分别添加 1 和 5 之后,您将得到 A 列的单元格 6-10,依此类推。
Row() Row()-1 FLOOR(Row()-1) FLOOR(Row()-1)+1 Floor(Row()-1)+5
1 0 0 1 5
2 1 0 1 5
3 2 0 1 5
4 3 0 1 5
5 4 0 1 5
6 5 5 6 10
7 6 5 6 10
8 7 5 6 10
9 8 5 6 10
10 9 5 6 10