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而不是功能,但我对任何事情持开放态度.
你想要什么可以实现使用,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)
编辑
逻辑
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |