对另一个工作表中一行的 12 个单元格的顺序组求和

SUM sequential groups of 12 cells from a row in another worksheet

我有两个 excel sheets:一个是每月的费用,另一个是按费用类型分类的年度夏季费用。

对于每年的费用sheet,我想每12个月总结一次并把它放在一个单元格中,然后它旁边的单元格是接下来的12个月,依此类推。

所以想了解一下我的 sheet 是如何设置的:

Sheet 标题为 'Operating Expense' 的单元格 B4:M4 是当年 Jan-Dec 的月度开支。

在标题为 "sources & uses of funds" 的 sheet 上,我希望调用 D28 是 B4:M4 的总和,然后单元格 D29 是 N4:Y4 的总和等等直到我停止拖动公式。

我尝试了 Sum(offset()) 函数,但似乎无法理解。

放弃 SUM(OFFSET(...)) 方法并坚持对一对 INDEX function 求和,在第 4 行定义一个范围。 If 会更快并且是一个非易失性函数。

=SUM(INDEX('Operating Expense'!:,1,2+(ROW(1:1)-1)*12):INDEX('Operating Expense'!:,1,13+(ROW(1:1)-1)*12))

有了D28中的那个,你可以往下填B4:M4、N4:Y4等

工作原理:

与其他查找函数(例如 VLOOKUP 函数HLOOKUP 函数 等)不同,INDEX function 可以 return 一个可以直接使用的单元格地址引用,而不需要像 INDIRECT 函数 这样的额外开销。事实上,您可以将其中两个拼接在一起,只需一个冒号即可创建一个可用的单元格范围。

语法:

INDEX(<array>, <row_num>, <column_num>)

例子:(这些都是一样的)

=SUM(INDEX(A:A, 1, 1):INDEX(B:B, 5, 1))
=SUM(A1:INDEX(B:B, 5, 1))
=SUM(INDEX(A:A, 1, 1):B5)
=SUM(A1:B5)

一旦我们控制了单元格范围的行和列(又名 数组),我们就可以用一点数学来操纵它们。

If you put =ROW(1:1) in any cell and fill down you will get 1, 2, 3, etc. This is how we sequence the stagger as we fill down.

您希望第一组 12 个月的总和为 B4:M4,因此第一部分对 使用 4:4。这表示第 4 行的所有内容。1 因为只有一行要考虑。

您想从 B 列开始求和范围,以便在数字上是第 2 列。我们不想在第一次添加任何内容,但我们想添加 12 作为我们向下填充,所以匹配是 2 + (ROW(1:1)-1) × 122+(ROW(1:1)-1)*12 开始 of 2, 14, 26, etc.

同样,您希望在第 M 列结束总和范围,因此在数字上是第 13 列。我们不想第一次添加任何内容,但我们想添加 12 当我们向下填充时,匹配项是 13 + (ROW(1:1)-1) × 1213+(ROW(1:1)-1)*12 以结束 of 13, 25, 37, etc.

当您向下填充时,生成的单元格范围将是 B4:M4、N4:Y4、Z4:AK4 等。将这些填充到 SUM function 中会给您各自的总数。

如前所述,这是 INDEX 的一个特点。 VLOOKUP、HLOOKUP 等仅 return 值,而不是可用的单元格引用。