我想从每一行获取最后一个非空单元格以进行进一步操作。搜索网络我遇到了一个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 有人可以解释这条线最终是如何逐步转化为结果的。
答案 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!
错误与该规则不矛盾。但由于源不开放,我们不能完全确定这一点。但是这种方法经常成功使用,我们可以非常肯定。