
收到粉丝提问:EXCEL如何快速找出一行的非0单元并列出呢?如图所示:

从图中不难看出,题主需要提取行中非0单元格内容,并分别填入后三个单元格中。小兔分享几个解决办法。
方法一:INDEX + SMALL函数
我们可以在H2单元格输入以下公式:
=IFERROR(INDEX($B2:$G2,SMALL(IF($B2:$G2<>0,COLUMN($B2:$G2)-COLUMN($B2)+1),COLUMN(A1))),"")

公式说明:
1、$B2:$G2<>0:判断 B2:G2 范围内的每个单元格是否不等于零。
返回一个由 TRUE 和 FALSE 组成的数组,表示哪些单元格的值不等于零。
2、COLUMN($B2:$G2)-COLUMN($B2)+1:
计算 B2:G2 范围内每个单元格的相对列位置。返回一个由列位置组成的数组,例如 {1, 2, 3, 4, 5, 6}。
3、IF($B2:$G2<>0, COLUMN($B2:$G2)-COLUMN($B2)+1):
将非零单元格的列位置保留下来,零单元格的位置用空白替换。返回一个数组,例如 {1, 2, "", 4, "", ""}(假设 B2、C2、E2 和 F2 是非零值)。
4、SMALL(..., COLUMN(A1)):
COLUMN(A1) 返回 1,表示从数组中找第1个最小值。返回第一个非零单元格的位置。
5、INDEX($B2:$G2, ...):根据找到的位置返回 B2:G2 范围内对应的值。
6、IFERROR(..., ""):
如果 INDEX 函数返回错误(例如没有找到非零值),则返回空字符串 ""。
方法二:FILTER函数
FILTER 函数是用于筛选数据的强大函数,它可以根据指定条件从数组中提取匹配的值。
我们可以在H2单元格输入这个公式:
=FILTER($B2:$G2,$B2:$G2<>0)
FILTER 函数组合只有在单元格有足够空间显示结果时才会有效。否则,它会返回错误或显示部分结果。
需要注意的是,该函数适用于 Excel 365 或 Excel 2021,以前的版本不支持使用哦。

方法三:INDEX + FILTER函数
由于列表中正好有三个单元格有内容,因此直接使用FILTER函数就可以了,但我们需要知道的是,方法二中的公式,是提取所有非0的单元格内容,倘若存在内容的单元格超过三个,就需要借助INDEX函数,提取前三个。
可以在H2单元格输入这个公式:
=IFERROR(INDEX(FILTER(B2:G2,B2:G2<>0),{1,2,3}),"")

公式说明:
该公式通过FILTER函数从单元格范围 B2:G2 中筛选出所有非零值。再借助INDEX函数从这些非零值中提取前 3 个值。
使用IFERROR函数处理错误值,如果在筛选或提取过程中出现错误(如没有非零值),则返回一个空字符串,而不是错误提示。
以上分享的3种方法,都可以快速找出一行的非0单元并列到对应的单元格中,根据自己的情况和使用版本,选择适合自己方法。若还有疑问,欢迎给小兔留言哦~
想了解更多精彩内容,快来关注