布赖恩(Brian)有一行带有240个单元格的数字。在此行中,数字稳定下降,最终将在这240个单元中的某个点变为0。零将继续填充该行中的其余单元。 Brian需要编写一个方程式,该方程式将返回该行中的最后一个非零值。

有多种返回期望值的方法。

(使用Excel似乎并非总是这样吗?您可以想出很多方法来获得结果。)通常,您可以使用正则公式或数组公式。

如果要使用常规公式,可以尝试以下方法:

=OFFSET(A6,0,(COUNT(A6:IF6)-COUNTIF(A6:IF6,0))-1)

COUNTIF函数计算零值的数量,而COUNT函数确定范围内的单元格数量。彼此相减并进行1的调整会将OFFSET值放到最后一个非零值所在的单元格“数组”中。此公式假定值从A列开始;如果它们从另一列开始,则需要调整公式的COUNT / COUNTIF部分提供的值,以表示与第一列的偏移量。

这是公式的较短变体,基于从范围的右侧而不是左侧的偏移量:

=OFFSET(IF6,0,-COUNTIF(A6:IF6,0))

在这种情况下,重要的是IF6应该是该范围的实际右端。该公式的工作原理是计算范围内的零值数量(全部在范围的右侧),然后计算最后一个单元格(IF6)的单元格地址减去零位数。

以下是使用INDEX函数的版本:

=INDEX(A6:IF6,,MATCH(0,A6:IF6,0)-1)

使用LOOKUP函数,该版本甚至更短:

=LOOKUP(1,1/(6:6>0),6:6)

数组公式也可以使用。 (通过按Ctrl + Shift + Enter输入数组公式。)此函数使用INDIRECT函数:

=INDIRECT("R6C" & MAX((A6:IF6>0)*COLUMN(A6:IF6)),FALSE)

这个数组公式使用LOOKUP函数的有趣实现来找到正确的结果:

=LOOKUP(9.99999999999999E+307,IF(A6:IF6<>0,A6:IF6))

这是可以使用的另一个数组公式,这次使用OFFSET函数查找第6行中的最后一个非零值:

=OFFSET(A6,0,MIN(IF(6:6=0,COLUMN(6:6),300))-2)

这是一个更短的变化:

=MIN(IF(A6:IF6>0,A6:IF6))

到目前为止提供的所有这些公式都取决于行中的数字实际上确实会下降的事实,即它们从开始的数字开始而是逐渐变为零。如果数字不下降,则可以使用其他类型的数组公式来确定行中的最后一个非零值:

=INDEX(6:6,MAX(IF(A6:IF6<>0,COLUMN(A6:IF6))))

该公式首先确定该行(在本例中为第6行)中具有不等于零值的最大列,然后使用INDEX函数从该行中的该列获取值。

如您所知,有很多方法可以找到行中的最后一个非零值。选择一个能满足您的需求的产品;在这种情况下没有对与错。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3785)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: