求excel公式二(求条件公式的写法,很复杂)excel公式高手请帮忙二

来源:百度知道 编辑:UC知道 时间:2024/05/16 10:10:07
有数列A,为一组数字(30个左右),
数列B,为“0”或“1”
单元格K8,为一数字,
在C列中要求输入公式,对A数列按条件进行排名(C列中得到的结果应为1,2,3……)

条件如下:1.仅对B列中为“1”的数列排名,
2.A数列中小于K8的第三个数字排名为“1”,
小于K8的第二个数字排名为“2”
……
如此升序排列
3.如果小于K8的不足三个,则第这个数排名为“1”,
如此升序排列(就是,小于K8的如果只有2个,则最小的排名为“1”,另一个排名为“2”,如此上升)
4.小于K8的第4个数字,不排列,对应C列不显示内容,
5.排序到7为止,排序大于7则不显示内容
(即C列中出现1-7,其余不显示内容。)

我倒是可以只通过Excel的公式实现这个,但是要用到很多辅助列。
但是个人认为这个通过Excel自身的公式实现还是比较不明智的选者,如果通过VBA的话,问题就简单多了。
既然做了,我还是说一下吧
首先不好意思,我要挪一下你的K8格。我用N8格代替你的K8格,因为我使用辅助行时不小心占了K8格,但是其实是相通的,你如果把辅助行放到很远的后面,就不会占了,我说思路。
首先我用L列,写入公式 =IF(B1=1,IF(A1<$N$8,A1,""),"")
作用是将参与筛选的也就是B1格是1的,而且又比N8格小的数都筛出来存放在L列
然后在K列输入公式 =IF(L1=MAX($L$1:$L$30),L1,"")
这列的作用是将L列中最大的列出来,也就是小于N8的第一个数
然后在J列输入公式 =IF(K1="",L1,"")
作用就是把小于N8的第一个数挑出来后的数存到J列中
然后在I列中输入公式 =IF(J1=MAX($J$1:$J$30),J1,"")
作用是把J列中最大的数挑出来,也就是小于N8的第二个数
同上理,
在H列中输入公式 =IF(I1="",J1,"")
作用是把小于N8的第二个数挑出来后存放在H列中
然后是在G列中输入公式 =IF(H1=MAX($H$1:$H$30),H1,"")
把H列中最大的数,也就是小于N8的第三个数挑出来,放到G列中。
这样,G,I,K三列便是存放着小于N8的第三、二、一个数
接着利用D、E、F三列对G、I、K三列排序,
F列输入公式 =IF(G1<>"",COUNT($G$1:G1),"")
E列输入公式 =IF(I1<>"",COUNT($I$1:I1)+MAX($F$1:$F$30),"")
D列输入公式 =IF(K1<&g