=INDEX+SMALL+IF+ROW组合函数疑问

=IFERROR(INDEX('6.27库存表'!$B$4:$B$200,SMALL(IF('6.27库存表'!$G$4:$G$200>=90,ROW($4:$200)),ROW(A1))),"")大家帮我看看哪里出错了,提取的数据不是我想要的数据,且有些数据提取不出来。想把G列单元格满足≥90所在行的整行数据按照顺序提取出来,请大神帮帮忙!

=IFERROR(INDEX('6.27库存表'!$B:$B,SMALL(IF('6.27库存表'!$G$4:$G$200>=90,ROW($4:$200)),ROW(A1))),""),数组公式,即必须Ctrl+Shift+Enter三键齐按结束公式编辑,会自动生成一对{ }。
公式出错原因:后面用SMALL提取的是符合要求的行号,再用INDEX函数时,必须引用整行,而不能仅引用区域,如INDEX(B:B,4)是返回B4,而INDEX(B4:B200,4)则是返回从B4开始的第四个即B7的数据,因为这里的4是行号而不是次序,所以引用整列。追问

非常感谢,赞赞赞!改过就行了。引用空格的数据不是可以显示空白吗,但是表格中显示为“0”。还有,引用出来数据是怎么排序的,排序有点乱。再帮忙帮忙指点指点,谢谢!

追答

因为提取出的是行号,而B列是空的话,比如B8是空,但空白(真空,即真正的空单元)默认为是0,所以会返回0。
此类公式正常不用IFERROR,此函数只对错误值起作用,而用不符合条件返回一个较大的行号,正常用4^8,即65536,如果6.27库存表的B列不是数值,后面加&"",遇到空格直接显示空值。
=INDEX('6.27库存表'!$B:$B,SMALL(IF('6.27库存表'!$G$4:$G$200>=90,ROW($4:$200),4^8),ROW(A1)))&""
返回的数据,是按符合条件的数据,从上到下依次提取出来的,原来是什么顺序还是什么顺序,只是跳过了不符合条件的数据。
如果B列是数值,则要加判断条件,判断返回的单元格是否为空,如果为空,显示为空,否则为原值。
=IF(INDEX('6.27库存表'!$B:$B,SMALL(IF('6.27库存表'!$G$4:$G$200>=90,ROW($4:$200),4^8),ROW(A1)))="","",INDEX('6.27库存表'!$B:$B,SMALL(IF('6.27库存表'!$G$4:$G$200>=90,ROW($4:$200),4^8),ROW(A1))))
当然,最后的条件判断根据不同的实际情况,可能会有更简单的判断。

温馨提示:答案为网友推荐,仅供参考
相似回答