在Excel中如何提取指定的字符串?
今天和大家分享“最难的名字提取”,根据A列的数据,得到B列,C列的数据,如下图,大家可以先不看我的解法,自己思考几分钟,看自己是否有方法,这样可能会提高自己函数水平更快。
一、解法1:复制到Word里处理
1、动画操作
二、解法2:函数实现
1、公式截图
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的位置,就是第一个不是数字的位置
-
COUNT(0/(CODE(MID(A2,ROW($1:$40),1))>=65))这个得到英文或者汉字的个数,原理一样,count统计数值型数字的个数,错误值忽略
-
C2单元格里的公式就很简单了=SUBSTITUTE(A2,B2,””)
三、vba+正则表达式编程实现
1、动画效果
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))
-
标签: