VBA. How to find position of first digit in string

前端 未结 6 1223
陌清茗
陌清茗 2020-12-31 08:47

I have string \"ololo123\". I need get position of first digit - 1. How to set mask of search ?

相关标签:
6条回答
  • 2020-12-31 09:05

    Something like this should do the trick for you:

    Public Function GetPositionOfFirstNumericCharacter(ByVal s As String) As Integer
        For i = 1 To Len(s)
            Dim currentCharacter As String
            currentCharacter = Mid(s, i, 1)
            If IsNumeric(currentCharacter) = True Then
                GetPositionOfFirstNumericCharacter = i
                Exit Function
            End If
        Next i
    End Function
    

    You can then call it like this:

    Dim iPosition as Integer
    iPosition = GetPositionOfFirstNumericCharacter("ololo123")
    
    0 讨论(0)
  • 2020-12-31 09:05

    Not sure on your environment, but this worked in Excel 2010

    'Added reference for Microsoft VBScript Regular Expressions 5.5
    
    Const myString As String = "ololo123"
    Dim regex As New RegExp
    Dim regmatch As MatchCollection
    
    regex.Pattern = "\d"
    Set regmatch = regex.Execute(myString)
    MsgBox (regmatch.Item(0).FirstIndex)   ' Outputs 5
    
    0 讨论(0)
  • 2020-12-31 09:12

    Here is a lightweight and fast method that avoids regex/reference additions, thus helping with overhead and transportability should that be an advantage.

    Public Function GetNumLoc(xValue As String) As Integer
    
    For GetNumLoc = 1 To Len(xValue)
        If Mid(xValue, GetNumLoc, 1) Like "#" Then Exit Function
    Next
    
    GetNumLoc = 0
    
    End Function
    
    0 讨论(0)
  • 2020-12-31 09:25

    I actually have that function:

    Public Function GetNumericPosition(ByVal s As String) As Integer
        Dim result As Integer
        Dim i As Integer
        Dim ii As Integer
    
        result = -1
        ii = Len(s)
        For i = 1 To ii
            If IsNumeric(Mid$(s, i, 1)) Then
                result = i
                Exit For
            End If
        Next
        GetNumericPosition = result
    End Function
    
    0 讨论(0)
  • 2020-12-31 09:25

    You could try regex, and then you'd have two problems. My VBAfu is not up to snuff, but I'll give it a go:

    Function FirstDigit(strData As String) As Integer
        Dim RE As Object REMatches As Object
    
        Set RE = CreateObject("vbscript.regexp")
        With RE
            .Pattern = "[0-9]"
        End With
    
        Set REMatches = RE.Execute(strData)
        FirstDigit = REMatches(0).FirstIndex
    End Function
    

    Then you just call it with FirstDigit("ololo123").

    0 讨论(0)
  • 2020-12-31 09:27

    If speed is an issue, this will run a bit faster than Robs (noi Rob):

    Public Sub Example()
        Const myString As String = "ololo123"
        Dim position As Long
        position = GetFirstNumeric(myString)
        If position > 0 Then
            MsgBox "Found numeric at postion " & position & "."
        Else
            MsgBox "Numeric not found."
        End If
    End Sub
    
    Public Function GetFirstNumeric(ByVal value As String) As Long
        Dim i As Long
        Dim bytValue() As Byte
        Dim lngRtnVal As Long
        bytValue = value
        For i = 0 To UBound(bytValue) Step 2
            Select Case bytValue(i)
                Case vbKey0 To vbKey9
                    If bytValue(i + 1) = 0 Then
                        lngRtnVal = (i \ 2) + 1
                        Exit For
                    End If
            End Select
        Next
        GetFirstNumeric = lngRtnVal
    End Function
    
    0 讨论(0)
提交回复
热议问题