找到不同于0的最后一个值(没有VBA)

时间:2013-07-24 18:43:15

标签: excel

我有以下excel表:

StartDate  YTDActual
1/1/2013   100
2/1/2013   200
3/1/2013   99
4/1/2013   33
5/1/2013   45
6/1/2013   0
7/1/2013   0

是否存在一个公式,对于每个StartDate,返回YTDActual中的关联值,如果它不同于0,否则它将返回前一行中不同于0的最后一个YTDActual值。

因此,基本上该公式将在NewValue列中生成以下值:

StartDate  NewValue
1/1/2013   100
2/1/2013   200
3/1/2013   99
4/1/2013   33
5/1/2013   45
6/1/2013   45
7/1/2013   45

请注意,在Jun& 7月值为45,因为May的最后一个非零YTDActual值为45。

由于

更新:只是澄清一下,第二张表进入另一张表,它们不是并排的。

4 个答案:

答案 0 :(得分:1)

如果您的日期从A2开始,而YTD实际金额从B2开始,请尝试将此公式复制下来

=LOOKUP(2,1/(B$2:B2<>0),B$2:B2)

将为您提供所需的结果

答案 1 :(得分:1)

这样就可以了:

Col A      Col B        Col C
StartDate  YTDActual    NewValue
1/1/2013   100          =if(B2<>0,B2,C1)
...

然后只需向下拖动C列中的公式

答案 2 :(得分:0)

新数据是否在YTDActual旁边的列中?我在这里得到的是它需要引用日期还是只能是C列:

=if(B2=0,C1,B2)

如果不是零,则返回B2,否则返回其上方的单元格,可以在单元格C2中输入,然后向下拖动以覆盖其他单元格。

如果这不能使上面B列旁边的列中有新数据,那么我认为如果没有VBA,你可能很难做到这一点。您将遇到的问题是您无法创建循环,因此如果值为零,您可以检查另一个值,但这也可能为零,依此类推。

答案 3 :(得分:0)

我最终将此公式用于NewValue列:

=IF(INDEX(Availability[YTDActual], MATCH(B2, Availability[StartDate], 0)) <>0, INDEX(Availability[YTDActual], MATCH(B32, Availability[StartDate], 0)), INDEX(Availability[YTDActual],MATCH(0,Availability[YTDActual],0)-1))

其中,Availability是excel表的名称,YTDActual是列的名称,B2,B3,...包含日期。