上一篇文章介绍的是拆分地址和电话号码,该案例的思路,也可以用到很多问题中。
例如,有下面一个例子,要求将品名和规格拆分:

首先要弄明白,品名和规格有什么区别?也就是说,品名和规格的界限是什么?
如果某个字符是文本(汉字或者字母等),然后下一个字符就是数字了,那么下一个字符开始就是规格,该字符之前的就是品名,因为在本案例中,规格都是以数字开头的字符串。
那么,如何判断每个字符是否文本或者是否数字呢?
我们可以使用MID函数将品名规格中的每个字符取出来,然后将每个字符乘以数字1,如果是数字(MID函数取出来的实际上是文本型数字),将其乘以1还是数字,但如果是文本,就会出现错误,根据这个思路,我们就可以解决这个拆分品名和规格的问题了。
MID函数将品名规格中的每个字符取出来的表达式如下:
MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)
以第三个单元格数据为例(这个字符串短点,看起来更清楚),该表达式的结果是如下的数组:
{"甘";"草";"片";"0";".";"2";"g";"*";"1";"0";"0";"T"}
将这个数组的每个元素乘以1,表达式如下:
MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1
这个表达式的结果就是:
{#VALUE!;#VALUE!;#VALUE!;0;#VALUE!;2;#VALUE!;#VALUE!;1;0;0;#VALUE!}
使用ISNUMBER函数进行判断的表达式为:
ISNUMBER(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1)*1)
其结果是如下的数组:
{FALSE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE}
那么,使用MATCH函数从这个数组中查找第一个TRUE出现的位置:
MATCH(TRUE,ISNUMBER(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1)*1),0)
MATCH的这个结果,就是规格数字第一次出现的位置,那么,这个位置右侧的全部字符就是品名了,该位置右侧的全部字符就是规格了。
这样,提取品名的公式如下(以第三个单元格数据为例):
=LEFT(A4,MATCH(TRUE,ISNUMBER(MID(A4,ROW(INDIRECT("1:"&LEN(A4))),1)*1),0)-1)
提取规格的公式如下(以第三个单元格数据为例):
=MID(A4,LEN(D4)+1,100)
----------------------------------
Excel是持之以恒的逻辑思维训练,转变观念,把主要精力放到逻辑思路上,才是你最需要去做的!
----------------------------------
100多小时的系列课程,扫描下图的二维码了解:


