原始数据如图1,在B列中查找小于等于C1的值,然后在A列中找出这些值对应的值,并显示在D列中,比如在B列中第一个查找到的是20,期在A列中对应的值是“”丁“”,第二个查找的仍然是20,其在A列中对应的是“辛”,第三个查到的是18,在A列中对应的是“子”,依次类推,结果如图2所示。
应该是这个意思吧,数组公式,在函数输入栏输入后按ctrl+shift+enter,再下拉就可以了
=IFERROR(INDEX($A$1:$A$15,100-RIGHT(LARGE(IF($B$1:$B$15<=20,$B$1:$B$15*1000-ROW($B$1:$B$15),""),ROW(A1)),2)),"")
说明:
if语句,判断B列是否小于等于20,如果是,记下这个值乘以1000再减去行号的数(这个构造出来的数字相等于记下了原数字和行号两个数,只要通过简单的计算就可以恢复这两个数,同时把相同数字按顺序区分出了大小,因为先出现的算比后出现的数字大,所以这里是用的减号,后面计算的100减去后两位就可以恢复出这个数的行号了,这个问题关键就是在这个数字的构造这里,后面都好解决了)
large语句,找出数组中第几大的数,第几大的参数由行号提供,也就是这个公式里唯一的相对地址A1
100-right语句,恢复找出来的数的行号
index语句,找出A列中这行的文字
onerror语句,如果找不出来就显示空,也就是最下面找完了再拖就不会有结果
很感谢你解决了一个问题。我还想问一下,当上面的比较数20如果是万以上的数字的话,并且查找的数字范围是500多行,请问上面公式中那个1000该换成什么数字比较好以及100-right中的100要换成什么数字?麻烦你空闲的时候回复下好吗?
追答跟20没有关系,只跟行数有关系
只要100那个位置的数超过行数就行了,如果是500多行的话,1000换成10000,100换成1000,都乘10就够了,right那个2位换成对应1000的3位就行了。
A、B两列数据,单元格C8有一固定值,如图1.现在需要在B列中查找小于等于C8的6个值,这些值必须是从大到小从下向上排列,然后在A列中找出其对应的值,从C7单元格开始向上填充。在实际情况中,A、B列的数据比较多(可能500个左右,甚至更多),且B列数据比较大,类似如图3的B列G列数据。谢谢了。
d1IF(B$1:B$15<=C$1,B$1:B$15*1000-ROW($1:$15))数组公式,同时按ctrl+shift+回车结束下拉