如何用vba提取单元格数据中的字母?

如图所示,如果要提取单元格中的字母,用普通的excel工作表函数是无法实现,可以用正则表达式。

以下是在vba中的自定义函数,无论字母位于单元格数据前中后,都可以提取单元格中的字母,不区分大小写。

'sOrignText参数表示要执行正则表达式的字符串,
Function GetAZaz(ByVal sOrignText As String)
    '定义正则表达式对象
    Dim oRegExp As Object
    '定义匹配字符串集合对象
    Dim oMatches As Object
    '定义匹配子字符串集合对象
    Dim oSubMatches As Object
    Dim oMatch As Object
    Dim str1 As String
    '创建正则表达式
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
        .Global = True
        '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
        .IgnoreCase = True
        '设置要查找的正则规则
        .Pattern = "[^a-z^A-Z]"
        '判断是否可以找到匹配的字符,若可以则返回True
        If .Test(sOrignText) Then
'            对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
            Set oMatches = .Execute(sOrignText)
'            For Each oMatch In oMatches
'                '返回匹配到的字符串的位置
'                Debug.Print oMatch.FirstIndex
'                '返回匹配到的字符串的长度
'                Debug.Print oMatch.Length
'                '返回子匹配结果
'                str1 = oMatch.SubMatches(0)
'            Next
'            GetAZaz = oMatches(0).Value
'            把字符串中用正则找到的所有匹配字符替换为其它字符
            GetAZaz = .Replace(sOrignText, "")
        Else
            GetAZaz = sOrignText
        End If
    End With
    Set oRegExp = Nothing
    Set oMatches = Nothing
End Function
       

发表评论