OFFSET和SUM公式

时间:2017-10-30 07:50:09

标签: excel excel-formula

我有以下Excel电子表格:

        A           B         C         D        E        F       G

1     Year         2015      2016     2017     2018     2019    2020

2     Revenue     5.000     4.000     6.000    

3     Years to go back:       2
4     Sum of Periods:      10.000

第1行中,您可以找到年2015直到2020,在第2行中找到每年的相应收入。

Cell C3 中,用户应输入返回总结收入的年数。
例如,如果用户输入2 Excel,则返回2年,并总结20172016的收入10.000在上面的情况。为此我使用了以下公式:

=SUM(OFFSET($E$2,0,-C3):$E$2)

这个公式和上面描述的计算到目前为止工作得很好。

但是,在2018中,我必须将上面公式中 Cell $ E $ 2 的起点调整为 Cell $ F $ 2 。此外,2018年将从计算中排除。

=SUM(OFFSET($F$2,0,-C3):$F$2)

现在我的问题是如何避免每年进行这种永久性的重新调整?

- >我认为解决方案应该是一个公式,用于识别中的第一个“非空”单元格,然后开始倒计数这个细胞。不知何故,SUM,OFFSET,ROW& COLUMN公式。

3 个答案:

答案 0 :(得分:1)

您可以使用以下公式:

=SUM(INDIRECT("R2C" & (MATCH(YEAR(TODAY()),$1:$1,0) - $C$3 + 1) & ":R2C" & MATCH(YEAR(TODAY()),$1:$1,0), FALSE))

但请注意,我假设current year - $C$3在您的数据范围内。

简要说明:

YEAR(TODAY()) - it will return the year of current date, then you don't need to re-adjust every year
MATCH(lookup_value, lookup_array, match_type) - it will find the value matched in first row, and return the index of cell
INDIRECT() - Form the result of match to a R1C1 notation, and convert the text to excel range

答案 1 :(得分:0)

更简单的公式可能是使用OFFSET的第4个参数设置宽度并使用OFFSET

计算YEAR(TODAY()0-2016的起点
=SUM(OFFSET($B$2,0,YEAR(TODAY())-$C$1,1,$B$3))

答案 2 :(得分:0)

非挥发性选项

如果不是TODAY()函数,那么非易失性。将TODAY()替换为包含起始年份的单元格作为日期。或者用包含年份(整数)的单元格引用替换Year(Today()),然后它将是一个非易失性选项。

=SUM(INDEX($1:$1,MATCH(YEAR(TODAY()),$1:$1,0)):INDEX($1:$1,MATCH(YEAR(TODAY()),$1:$1,0)-($C$3-1))

每当电子表格上的某些内容发生变化时,易失性函数会重新计算。 非易失性函数仅在影响它们的内容发生变化时重新计算。

index函数返回其查找范围内的单元格地址。对于2D范围,您需要提供行和列引用。对于1D范围,您只需要找到该范围内的位置。

匹配在给定范围内找到一个值。