LOOKUP公式的最后评估步骤背后的逻辑,用于查找连续的最后一个非空值。

时间:2016-06-25 10:33:29

标签: excel excel-formula

我想从每一行获取最后一个非空单元格以进行进一步操作。搜索网络我遇到了一个LOOKUP公式,可以很好地完成这项工作。我在行中有alpha和数字数据。 样本数据如下所示。

ID1 ID2 ID3 ID4 ID5     ID6 ID7 ID8 ID9 ID10    ID11
a1  a2  a3  a4  a5      23  24  25      25  

23  NN  67  99  200001  ss  p1  23  rq          3

我在L4中使用以下公式,它给出了L4中3的正确结果。第2行的类似公式给出L2中25的结果。 为了理解我执行公式评估的公式,但我没有得到最后一步的逻辑,因为它转化为最终结果。

=LOOKUP(2,1/(A4:K4<>""),A4:K4)

LOOKUP(2,{1,1,1,1,1,1,1,1,1,#DIV / 0,1!},A4:K4) 在此步骤结果之后,行4的最后一个非空值即为3 有人可以解释这条线最终是如何逐步转化为结果的。

Snapshot

2 个答案:

答案 0 :(得分:3)

基本上以下面的公式为例

=LOOKUP(2,1/(A1:D1<>""),A1:D1)

A1:D1中的数据

A1  B1  C1  D1
1    2   3  

公式将填充如下

=LOOKUP(2,{1,1,1,#DIV/0!},{1,2,3,0})

这种方式非常简单。

1 /(A1:D1&lt;&gt;“”)创建一个1和#DIV \ 0的数组!

            1  where the cell is not blank
            #DIV/0  where the cell is blank

然后查找公式查找此数组中的2,它无法找到,但它总是会在填充1和#DIV / 0!的数组的上下文中返回最后NON ERROR值的位置,将成为数组中的第3个位置,然后LOOKUP公式返回公式A1中最后一个参数数组的第3个位置:D1,即3

答案 1 :(得分:2)

找到最后一个填充单元格的方法使用LOOKUP的向量形式。在

=LOOKUP(2,{1,1,1,1,1,1,1,1,1,#DIV/0!,1},A4:K4) 2是lookup_value,数组{1,1,1,1,1,1,1,1,1,#DIV/0!,1}是lookup_vector,A4:K4是result_vector。

LOOKUP的向量形式在lookup_vector中查找lookup_value,并从result_vector中的相同位置返回值。

如果LOOKUP函数无法直接在lookup_vector中找到lookup_value,则该函数匹配lookup_vector中小于或等于lookup_value的最大值。如果数组中有多个相等的值(最大值小于或等于lookup_value),则采用最后一个的位置。在这种情况下,它匹配最后一个1,因为这是lookup_vector中小于或等于2的最大值。

但是要做到这一点,有规则,lookup_vector中的值必须按升序排列。这是这种方法没有记录的功能。它接缝好像lookup_vector中的#DIV/0!错误与该规则不矛盾。但由于源不开放,我们不能完全确定这一点。但是这种方法经常成功使用,我们可以非常肯定。