分享

用自定义函数提取字符

 L罗乐 2019-04-17

本文转载自公众号:Excel之家ExcelHome,作者:翟振福。

先来看看一个表,也不知道哪个挨千刀的,在记录数据的时候搞成这个样子,都聚集在A1单元格。要将A1中的姓名和银行卡号分别提取出来,只需要一个自定义函数GetChar就可以轻松搞定。

C2单元格:=INDEX(GetChar($A$1,3),ROW(1:1))

D2单元格:=INDEX(GetChar($A$1,1),ROW(1:1))

银行卡号可以搞定,身份证号也很容易,还是这个挨千刀的记录员,把姓名和身份证号都登记在了A1单元格,有没有一种想动刀子的冲动?再次请出自定义函数GetChar:

C2单元格:=INDEX(GetChar($A$1,3),ROW(1:1))

D2单元格:=LEFT(INDEX(GetChar($A$1,1),ROW(1:1))&'X',18)

那么这个神秘的GetChar到底是什么呢?

再和你赌5毛钱的,你现在的电脑里写完这个公式之后,你得到的结果是:#NAME?

它是来源于我独创的VBA自定义函数,在你的VBA模块中植入以下代码,来吧,和我一起轻松玩转提取字符:

Function GetChar(strChar As String, varType As Variant) '取值函数

    Dim objRegExp As Object

    Dim objMatch As Object

    Dim strPattern As String

    Dim arr

    Set objRegExp =CreateObject('vbscript.regexp')

    varType = LCase(varType)

    Select Case varType

        Case 1, 'number'

            strPattern ='-?\d (\.\d )?'

        Case 2, 'english'

            strPattern = '[a-z] '

        Case 3, 'chinese'

            strPattern ='[\u4e00-\u9fa5] '

    End Select

    With objRegExp

        .Global = True

        .IgnoreCase = True

        .Pattern = strPattern

        Set objMatch = .Execute(strChar)

    End With

    If objMatch.Count = 0 Then

        GetChar = ''

        Exit Function

    End If

    ReDim arr(0 To objMatch.Count - 1)

    For Each cell In objMatch

        arr(i) = objMatch(i)

        i = i 1

    Next

    GetChar = arr

    Set objRegExp = Nothing

    Set objMatch = Nothing

End Function

它的功能设计就是专门为提取字符的,语法为:GetChar(strChar,varType):

varType参数为1时,提取:数字

varType参数为2时,提取:英文

varType参数为3时,提取:汉字


你也试试吧。

图文制作:翟振福

当当网4月16至23日,百万图书每满100减50

复制以下链接,在浏览器中打开,马上围观!

http://search.dangdang.com/?key=Excel%20Home&act=input

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多