http://www.pptjcw.com

excel数据分析:用自定义函数提取字符

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

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

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

    excel数据分析:用自定义函数提取字符

    银行卡号可以搞定,身份证号也很容易,还是这个挨千刀的记录员,把姓名和身份证号都登记在了A1单元格,有没有一种想动刀子的冲动?再次请出自定义函数GetChar:
    C2单元格:=INDEX(GetChar($A$1,3),ROW(1:1))
    D2单元格:=LEFT(INDEX(GetChar($A$1,1),ROW(1:1))&”X”,18)

    excel数据分析:用自定义函数提取字符

    那么这个神秘的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时,提取:汉字

    提示:如果您觉得本文不错,请点击分享给您的好友!谢谢

    上一篇:excel函数教程:为什么你的图表那么丑? 下一篇:excel vba教程:按部门快速拆分工作簿

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。