我已经很久没有使用过 Excel 了,现在我需要一些关于复制公式的帮助。
这是对我正在尝试做的事情的简化解释:
A1:365
其中有每日销售数据。
在BI列中,需要计算每周的销售额,因此B1中的公式是=SUM(A1:A7)
如果我复制公式,B2 会变成=SUM(A2:A8)
,但我希望它说=SUM(A8:A14)
可以做到这一点而不需要重新输入 52 次公式吗?
答案1
正如前面提到的,INDIRECT()
这是一个选项。另一个是OFFSET()
...
因此 B1 就变成
=SUM(OFFSET($A$1,(ROW()-1)*7,0,7,1))
并像之前一样抄下来。
稍微解构一下,定义一个从行和列开始向下和横向的OFFSET(reference, rows, cols, height, width)
范围。(如果您只想要 1x1 范围,则后两个是可选的)。没有参数返回包含函数的单元格的行号,因此在上面的例子中,它在 B1 中返回 1,在 B2 中返回 2,等等,所以我们只需减去 1 并乘以我们想要的大小(在本例中为 7)即可确定列表中求和的目标应该从哪里开始。rows
cols
reference
height
width
ROW()
答案2
是的,可以做到。
尝试一下:
=SUM(INDIRECT(ADDRESS((CELL("row",B1)-1)*7+1,1)):INDIRECT(ADDRESS((CELL("row",B1))*7,1)))
编辑:
感谢 Mike Woodhouse(参见他的回答),我可以稍微简化我的解决方案。
Row()
(在单元格“B1”中)将执行相同的CELL("row",B1)
操作
=SUM(INDIRECT(ADDRESS((ROW()-1)*7+1,1)):INDIRECT(ADDRESS(ROW()*7,1)))
会做同样的事情,但更简单一些。
解释:
然后您需要计算地址。
(CELL("row",B1)-1)*7+1
将给出起始单元格。CELL("row",B1)
给出当前行的编号。减 1 乘以 7 并加 1 将给出每行的起始每日行作为数字。
ADDRESS((CELL("row",B1)-1)*7+1,1)
是用数字制作地址字符串,我给出了计算出的起始行号和列号(末尾的 1)
INDIRECT(ADDRESS((CELL("row",B1)-1)*7+1,1))
间接是根据字符串创建一个范围。
与最后一个所需单元格相同。INDIRECT(ADDRESS((CELL("row",B1))*7,1))
区别仅在于结束行的计算。
然后我把整个东西都给了Sum
,就完成了。只要抄下 52 次,你就可以得到每周的总数。