EXCEL教程:字符串中的名字 都是这样提取的

Excel中如何提取指定的字符串? 

今天和大家分享“最难的名字提取”,根据A列的数据,得到B列,C列的数据,如下图,大家可以先不看我的解法,自己思考几分钟,看自己是否有方法,这样可能会提高自己函数水平更快。

EXCEL:字符串中的名字 都是这样提取的

一、解法1:复制到Word里处理

1、动画操作

EXCEL:字符串中的名字 都是这样提取的

二、解法2:函数实现

1、公式截图

EXCEL:字符串中的名字 都是这样提取的

2、公式

=MID(A2,MATCH(1=1,CODE(MID(A2,ROW($1:$40),1))>=65,),COUNT(0/(CODE(MID(A2,ROW($1:$40),1))>=65)))

3、公式解释

  • MID(A2,ROW($1:$40),1)把一个字符都分隔出来

  • CODE(MID(A2,ROW($1:$40),1))>=65,code函数把每一个字符都转换成数字,杠,数字它们的数值都小于65,65是字母A的数值,如果大于等于65,说明不是数字

  • MATCH(1=1,CODE(MID(A2,ROW($1:$40),1))>=65,),这里的1=1返回true,也就是我们现在查找第一个true的位置,就是第一个不是数字的位置

EXCEL:字符串中的名字 都是这样提取的

  • COUNT(0/(CODE(MID(A2,ROW($1:$40),1))>=65))这个得到英文或者汉字的个数,原理一样,count统计数值型数字的个数,错误值忽略

  • C2单元格里的公式就很简单了=SUBSTITUTE(A2,B2,””)

三、vba+正则表达式编程实现

1、动画效果

EXCEL:字符串中的名字 都是这样提取的

2、代码

Option Explicit

Function 提(Rg As Range, x%)

Dim Reg

Set Reg = CreateObject(“Vbscript.RegExp”)

With Reg

.Global = True

If x = 1 Then

.Pattern = “[^0-9-]”

ElseIf x = 2 Then

.Pattern = “[0-9-]”

End If

End With

提 = Reg.Replace(Rg, “”)

End Function

3、具体操作方法

第1步:复制上面的代码

第2步:光标定位到工作表标签处,右击,查找代码,插入菜单,插入模块

第3步:把复制代码粘贴到空白处

第4步:在B2单元格输入公式=提($A2,COLUMN(A2))