关于EXCEL函数index+small组合使用的问题

原本函数如下显示正常
=INDEX(销售明细!D$2:D$1000,SMALL(IF(销售明细!$E$2:$E$1000="结清货款",ROW($1:$999),999),ROW(C1)))&""
后来在if语句中增加了or函数更改后如下,显示的结果变成了 销售明细表D行的全部数值。。
=INDEX(销售明细!E$2:E$1000,SMALL(IF(OR(销售明细!$E$2:$E$1000="结清货款",销售明细!$E$2:$E$1000="收取尾款"),ROW($1:$999),999),ROW(H2)))&""
好吧。。。求教高手们我这个函数应该怎么改才能达到我想要的效果

=INDEX(销售明细!D$2:D$1000,SMALL(IF((销售明细!$E$2:$E$1000="结清货款")+(销售明细!$E$2:$E$1000="收取尾款"),ROW($1:$999),999),ROW(C1)))&""追问

这个怎么没法返回第一行的值?

small函数部分得出的值如下

追答

你最终要返回的是D列上的数据还是E列上的数据呢?你两个公式中INDEX引用的列都不同的,而且最后部分一个是 ROW(C1) 另一个却是 ROW(H2) 有点不理解了。如果方便可以将表格发过来的,这个没什么难度的问题。
[email protected]

追问

你的答案基本已经解决问题,但是在运行small函数时返回的行的值有误,自动的忽略了第一行,就像我给发的图一样,左边是选择性黏贴的目标区域的值,右边是small函数得出的值,第一行被无视了,而这段公式的if段却能正确得出结果。不知道这个问题怎么解决

追答

因为你的公式给出的引用范围就已经忽略了第一行,如:销售明细!D$2:D$1000,所以运算结果就自然没有第一行的事了。或者可以试试这样:
=INDEX(销售明细!D:D,SMALL(IF((销售明细!E:E="结清货款")+(销售明细!E:E="收取尾款"),ROW($1:$999),999),ROW(C1)))&""

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-20
1、原公式中有个小错误,后面的999应该是1000,当然这个错误与下面的问题没有关系:
=INDEX(销售明细!D$2:D$1000,SMALL(IF(销售明细!$E$2:$E$1000="结清货款",ROW($1:$999),1000),ROW(C1)))&""

2、你的问题出在,OR函数中,OR的结果是单一值,不是数组,因此得不到正确结果,修改一下公式:
=INDEX(销售明细!E$2:E$1000,SMALL(IF((销售明细!$E$2:$E$1000="结清货款")+(销售明细!$E$2:$E$1000="收取尾款"),ROW($1:$999),1000),ROW(H2)))&""
按三键完成公式。追问

更改以后无法获取第一行的值,具体看图

另外,999是因为如果对应的区域为控制的话不会显示错误。。。

追答

1、这个999改为1000(或者大于999的任一数)的目的是能够正确的得到E1000的值。
2、不清楚你的表格具体是什么数据,如果要得到E列的值,并且有重复,这个公式没有错误。
我424527870,找我。

追问

你的答案基本已经解决问题,但是在运行small函数时返回的行的值有误,自动的忽略了第一行,就像我给发的图一样,左边是选择性黏贴的目标区域的值,右边是small函数得出的值,第一行被无视了,而这段公式的if段却能正确的出结果。不知道这个问题怎么解决

追答

没有第一行的原因是公式中ROW(H2)引用错误,应该为H1,没有注意,只是复制粘贴了你的公式,不好意思。
修改一下公式:
=INDEX(销售明细!E$2:E$1000,SMALL(IF((销售明细!$E$2:$E$1000="结清货款")+(销售明细!$E$2:$E$1000="收取尾款"),ROW($1:$999),1000),ROW(H1)))&""