
在专栏《Excel高频引用函数应用大全》中作者介绍过两种方法来转换多行多列数据为一列,使用index或者offset函数组合都能达到转换效果,但这两个函数仅应用于常规场景,如果数据中包含了空单元格,则公式结果中会出现零值。
如下图所示,左侧数据表中包含了3个空单元格,此时使用常规公式得到的一列结果中,出现了3个零值结果,但我们的需求是跳过空单元格继续引用数据,效果如公式2所示。

面对包含多个空单元格的数据表,该如何来执行单列的转换呢!
下面作者将进行分步解析,一步步完成最后公式的组建。
进入正题。
首先我们通过一个文本合并函数,textjoin函数,将所有数据合并到一起。
这里之所以选用textjoin函数,是因为它有一个特性,能够跳过空单元格来合并数据,而我们的需求就是跳过空单元格。
因此输入公式:
=TEXTJOIN(",",1,C2:G20)

textjoin函数的语法表达式为:=textjoin(分隔符,是否跳过空单元格,数组区域)
根据表达式,可见公式的含义是以“,”为分隔符,跳过空单元格,来合并该单元格区域的所有数据到一个单元格内。这里第2参数值1代表跳过空单元格,参数值为0则不跳过空单元格。
从公式结果可见,textjoin函数跳过空单元格将区域所有内容合并到一起,如果能够再次以逗号进行分隔,则正好得到跳过空单元格的所有数据。
在excel365版本,我们可以使用textsplit函数,即文本分割函数,快速将textjoin函数的结果直接进行指定符号的分割,从而得到所需的结果。
虽然这个方法简单又快速,但受限于版本,我们需要选择其他函数继续公式的组建。
作者的思路是通过查找所有分隔符“,”的位置来提取两个分隔符之间的数据。
所以输入公式:
=FIND(",",L2,ROW($1:$999))

find函数的作用是查询指定字符串在单元格文本中的位置。
其表达式为:=find(字符串,单元格文本,开始位置)
包含3个参数,第1参数字符串我们设置为指定的分隔符“,”,第2参数单元格文本,就是要查询的单元格,即前面的textjoin函数;第3参数开始位置,指从单元格第几个字符开始查询。
公式中使用了"ROW($1:$999)"的表达,代表从第1个字符开始依次查询到第999个字符。这里999并不是固定的,只要大于单元格文本的总字符数量即可!
通常find+row的表达属于数组查询,会得到一个数组结果,如上图公式中的预览结果,它包含多组相同数字。
find函数的结果,就是每个分隔符的位置,有了这个位置,才能提取两个分隔符之间的内容。
但是这个结果中包含了重复数字,这需要我们组合一个函数来进行去重,保留唯一值,以便后续进行位置值的引用。
在所学excel函数,unique函数是专用于去重场景的新函数,它的语法表达式为:
购买专栏解锁剩余59%