Excel VBA小程序03-快速提取单元格中的数字和非数字

0、表格内容

A列 B列
手机2134
型号324
2135手机
325型号
2手机136
32型号6

1、Word法

1.1 提取非数字

遇事不决就去隔壁找Word,将表格A列内容复制到Word中,打开“替换”窗口,输入[0-9],点开“高级搜索”勾选“使用通配符”,点击全部替换,将替换好的内容再复制回Excel表格中。
Excel VBA小程序03-快速提取单元格中的数字和非数字_第1张图片

1.2 提取数字

将表格A列内容复制到Word中,打开“替换”窗口,输入[!0-9],点开“高级搜索”勾选“使用通配符”,点击“全部替换”,将替换好的内容再复制回Excel表格中。
Excel VBA小程序03-快速提取单元格中的数字和非数字_第2张图片

2、自定义函数法

按Alt+F11,打开VBA编辑器,选中工作薄右键插入模块,在代码窗口粘贴代码。
Excel VBA小程序03-快速提取单元格中的数字和非数字_第3张图片

2.1 提取非数字

Function Extract_numbers(aa As Range)
    Dim n As Integer, i As Integer, tem
    n = Len(aa.Value)
    For i = 1 To n
        If IsNumeric(Application.Find(Mid(aa.Value, i, 1), "0123456789")) = False Then
            tem = tem & Mid(aa.Value, i, 1)
        End If
    Next
    Extract_numbers = tem
End Function

在表格中输入对应公式
Excel VBA小程序03-快速提取单元格中的数字和非数字_第4张图片

2.2 提取数字

Function Extract_Non_numbers(aa As Range)
    Dim n As Integer, i As Integer, tem
    n = Len(aa.Value)
    For i = 1 To n
        If IsNumeric(Application.Find(Mid(aa.Value, i, 1), "0123456789")) = True Then
            tem = tem & Mid(aa.Value, i, 1)
        End If
    Next
    Extract_Non_numbers = tem
End Function

在表格中输入对应公式
Excel VBA小程序03-快速提取单元格中的数字和非数字_第5张图片

3、宏程序法

按Alt+F11,打开VBA编辑器插入模块,在代码窗口中粘贴代码。
然后关闭VBA编辑器,返回Excel界面,然后按Alt+F8打开“宏”对话框,选择对应宏执行即可。

3.1 提取非数字

Sub extra_No()
    Dim d As Object, arr, brr, i&
    Dim sr As String
    Set d = CreateObject("scripting.dictionary")
    Set regex = CreateObject("VBScript.RegExp")
    arr = [a1:a15]
    brr = [b1:b15]
    For i = 1 To UBound(brr)
        sr = Range("a" & i)
        With regex
           .Global = True
           .Pattern = "\d"
          '这里也可以写成.Pattern = "[\u4e00-\u9fa5]"
          Range("b" & i) = .Replace(sr, "")
        End With
        With [b1:b15]
            .NumberFormat = "General"
        End With
    Next
End Sub

3.2 提取数字

Sub extra_No()
    Dim d As Object, arr, brr, i&
    Dim sr As String
    Set d = CreateObject("scripting.dictionary")
    Set regex = CreateObject("VBScript.RegExp")
    arr = [a1:a15]
    brr = [b1:b15]
    For i = 1 To UBound(brr)
        sr = Range("a" & i)
        With regex
           .Global = True
           .Pattern = "\D"
          Range("b" & i) = .Replace(sr, "")
        End With
        With [b1:b15]
            .NumberFormat = "General"
        End With
    Next
End Sub

参考:
他山之石——在VBA中使用正则表达式-Part2(Regular Expression)
提取一个单元格中的文本(非数字)-自定义函数

你可能感兴趣的:(VBA,excel,vba)