从字符串中提取特定长度数字并使用这些数字创建新字符串

tjb*_*jb1 4 excel vba excel-vba

我有一个文本字段,我需要从中提取某些数字.该数字始终为7位数字,但字符串中的位置未知,字符串中的位数也未知.

样品串是"SF WO 1564892 DUE 5/19 FIN WO 1638964 DUE 5/27".我希望能够提取1564892和1638964,并生成一个新的字符串,如"1564892; 1638964",如果字符串中有更多,则继续添加"; number".我使用新字符串来查找并返回这些数字中最大的一个.

我找到了这个并且它有点工作,但它也会从字符串"123456789"返回"1234567",这是不受欢迎的.

Public Function ExtractDigits(Alphanumeric As String, DigitLength As Long)
Dim StringLenght As Long
Dim CurrentCharacter As String
Dim NewString As String
Dim NumberCounter As Long
Dim TempString As String


StringLenght = Len(Alphanumeric)
For r = 1 To StringLenght
    CurrentCharacter = Mid(Alphanumeric, r, 1)
    If IsNumeric(CurrentCharacter) Then
        NumberCounter = NumberCounter + 1
        TempString = TempString & CurrentCharacter
        If NumberCounter = DigitLength Then
            If NewString = "" Then
                NewString = TempString
            Else
            NewString = NewString & ";" & TempString
            End If
        End If
    End If
    If Not IsNumeric(CurrentCharacter) Then
        NumberCounter = 0
        TempString = ""
    End If
Next

ExtractDigits = NewString

End Function
Run Code Online (Sandbox Code Playgroud)

我更喜欢解决方案是在VBA而不是功能,但我对任何事情持开放态度.

Sid*_*out 5

你想要什么可以实现使用,RegEx但因为我走出去所以这里是一个非常简单的选择 :)

Sub Sample()
    Dim s As String
    Dim MyAr As Variant
    Dim i as Long

    s = "Thisis a Sample1234567-Blah12341234\1384156 Blah Blah 1375188 and more Blah 20 Section 1"

    For i = Len(s) To 1 Step -1
        Select Case Asc(Mid(s, i, 1))
        Case 48 To 57
        Case Else
            s = Replace(s, Mid(s, i, 1), "a")
        End Select
    Next i

    Do While InStr(1, s, "aa")
        s = Replace(s, "aa", "a")
    Loop

    MyAr = Split(s, "a")

    For i = LBound(MyAr) To UBound(MyAr)
        If Len(Trim(MyAr(i))) = 7 Then Debug.Print MyAr(i)
    Next i
    '
    ' This will Give you 1234567, 1384156 and 1375188
    '
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑

逻辑

  1. 替换该字符串中的任何字母不是任何字母的数字
  2. 替换该字母表的双重实例,直到只剩下一个
  3. 拆分那个字母表
  4. 循环并检查长度.
  5. 我已经显示了这些数字.你可以加入他们