将文本与字母数字分开

Mon*_*ika 3 excel vba

我想将文本(名称)与数字(ID)分开,但也有一些例外。

代码将文本与数字分开,但某些 ID 开头有字母。

如果适用,如何获得带有信件的完整身份证件?

在此输入图像描述

Option Explicit

Sub NamesandID()

Dim RowNum As Long
Dim eChar As Integer

RowNum = 2
Do Until Cells(RowNum, 1).Value = ""

    For eChar = 1 To Len(Cells(RowNum, 1))
        If IsNumeric(Mid(Cells(RowNum, 1), eChar, 1)) = True Then
            Cells(RowNum, 3).Value = Cells(RowNum, 3).Value _
              & Mid(Cells(RowNum, 1), eChar, 1)
        Else
            Cells(RowNum, 2).Value = Cells(RowNum, 2).Value _
              & Mid(Cells(RowNum, 1), eChar, 1)
        End If
    Next

    RowNum = RowNum + 1
Loop

End Sub
Run Code Online (Sandbox Code Playgroud)

Jvd*_*vdV 6

我的两分钱。


1):通过公式:

在此输入图像描述

公式为B2

=LET(X,TEXTAFTER(TEXTBEFORE(A2:A5,")"),"("),HSTACK(SUBSTITUTE(A2:A5," ("&X&")","",1),X))
Run Code Online (Sandbox Code Playgroud)

2)通过VBA:

Sub Test()

Dim arr As Variant: arr = Array("Ann Smith (A123456)", "Tom Ford(2453234)", "Alex Mohammet(4447434)(Text)", "Gerard Kowalski(A6739263)")

With CreateObject("vbscript.regexp")
    .Pattern = "^(.+?)\s*\(([A-Z]?\d+)\)(.*)$"
    For Each el In arr
        tmp = .Replace(el, "$1$3|$2")
        Debug.Print Split(tmp, "|")(0) 'Print name
        Debug.Print Split(tmp, "|")(1) 'Print ID
    Next
End With

End Sub
Run Code Online (Sandbox Code Playgroud)

对于那些对所使用的正则表达式的详细信息感兴趣的人,请点击链接。


VBA 的另一个选项是使用Split(),例如:

Sub Test()

Dim arr As Variant: arr = Array("Ann Smith (A123456)", "Tom Ford (2453234)", "Alex Mohammet (4447434)(Text)", "Gerard Kowalski (A6739263)")
Dim tmp As String

For Each el In arr
    tmp = Split(Split(el, "(")(1), ")")(0)
    Debug.Print Application.Trim(Replace(el, "(" & tmp & ")", ""))  'Print Name
    Debug.Print tmp                                                 'Print ID
Next

End Sub
Run Code Online (Sandbox Code Playgroud)

两个选项都会打印:

在此输入图像描述