如何从文本和数字混合的单元格中提取出所有数字?如果文本和数字出现的位置和次数有规律,那比较好办,Ctrl+E 和 Power Query 都有智能联想功能。
如果毫无任何规律,那么今天这两个函数就能大显身手了。
案例:将下图 1 中每个单元格中的所有数字和小数点全都提取出来,如果同一个单元格中的数字或小数点无论是否连续,提取出来都要放在同一个单元格中。
效果如下图 2 所示。
解决方案:1. 找一个空白列作为辅助列,在其中列出要提取出来的所有数字元素。
* D2 单元格中是个小数点。
2. 在 B2 单元格中输入以下公式 --> 下拉复制公式:
=IFERROR(TEXTJOIN("",TRUE,TEXTSPLIT(A2,TEXTSPLIT(A2,$D$2:$D$12,,TRUE),,TRUE)),"")
公式中用到了两个 365 函数 TEXTSPLIT 和 TEXTJOIN,那我们先来学习一下这两个函数,再来解释公式。
TEXTSPLIT 函数
作用:使用列或行分隔符拆分文本字符串,允许跨列拆分或按行向下拆分;
语法:TEXTSPLIT(text,col_delimiter,[row_delimiter],[ignore_empty], [match_mode], [pad_with])
text:必需,要拆分的文本;
col_delimiter:标记跨列溢出文本的点的文本;
[row_delimiter]:可选,标记向下溢出文本行的点的文本;
[ignore_empty]:可选,指定为 TRUE 可以忽略连续分隔符;默认为 FALSE,将创建一个空单元格;
[match_mode]:可选,指定 1 则不区分大小写的;默认为 0,会区分大小写;
[pad_with]:可选,用于填充结果的值;默认值为 #N/A。
TEXTJOIN 函数
作用:将多个区域和/或字符串的文本组合起来,其中包括要组合的各文本值之间指定的分隔符;
语法:TEXTJOIN(delimiter, ignore_empty, text1, [text2], …)
delimiter:必需,文本字符串,或空值,或用双引号引起来的一个或多个字符,或对有效文本字符串的引用;数字也会被视为文本;
ignore_empty:必需,如果为 TRUE,则忽略空白单元格;
text1:必需,要联接的文本项;
[text2, ...]:可选,要联接的其他文本项。
公式释义:
照例,要从最里面的公式开始,一层层向外分解。
TEXTSPLIT(A2,$D$2:$D$12,,TRUE):
将 A2 单元格按 $D$2:$D$12 区域的分隔符拆分到不同的列;
也就是将数字和小数点删除,仅提取出文字;
TEXTSPLIT(A2,...,,TRUE):
在刚才的公式外面再套一个 TEXTSPLIT 函数,目的是用刚才提出来的中英文或字符作为分隔符,将 A2 单元格按列分开;
相当于上述公式的反转版,保留数字和小数点,将其他全部删除;
之所以要用两次 TEXTSPLIT 来实现,是因为在辅助列中没法列举穷尽所有文字和字符,所以采用的办法是先删除所有要提取的数字,剩下的就是不需要提取的;再一次用公式将这些不需要的全部删除;
TEXTJOIN("",TRUE,...):上面提取出的数字如果不是连续的,就会放在不同的列中,要将它们合并在同一个单元格中,就要用 TEXTJOIN 将结果联接起来,数字之间不需要分隔符;
IFERROR(...,""):最后在公式外面套上 iferror 函数,不显示错误值
* 公式中的辅助区域 $D$2:$D$12 要绝对引用。