查找“-****-&引用;在字符串中,其中每个星表示VBA中的一个整数(0到9)

查找“-****-&引用;在字符串中,其中每个星表示VBA中的一个整数(0到9),vba,Vba,我的大脑现在有点挣扎,我正在努力完成标题中所说的。重申一下,如果我有一个任意字符串,我想找到四个连续数字(整数值在0和9之间)的位置,用两个“-”分隔,那么我需要找到“-***-”,其中每个“*”表示0和9之间的整数。函数的理想返回值是第一个“-”的位置 到目前为止我已经尝试过的,它返回任意字符串中的所有整数。我没能走得更远了 Function onlyDigits(s As String) As Integer Dim retval As String ' This is the

我的大脑现在有点挣扎,我正在努力完成标题中所说的。重申一下,如果我有一个任意字符串,我想找到四个连续数字(整数值在0和9之间)的位置,用两个“-”分隔,那么我需要找到“-***-”,其中每个“*”表示0和9之间的整数。函数的理想返回值是第一个“-”的位置

到目前为止我已经尝试过的,它返回任意字符串中的所有整数。我没能走得更远了

Function onlyDigits(s As String) As Integer
    Dim retval As String    ' This is the return string.      '
    Dim i As Integer        ' Counter for character position. '
    Dim firstDashPosition As Integer
    Dim foundDash As Boolean
    foundDash = False
    firstDashPosition = 0

    Debug.Print s
    retval = ""

    For i = 1 To Len(s)
        If Mid(s, i, 1) Like "-" Then
            If foundDash = True Then
                retval = retval + "-"
                firstDashPosition = i
                onlyDigits = firstDashPosition - 6
                Exit Function
            End If

            Debug.Print "here"
            foundDash = True
            retval = retval + "-"
        ElseIf Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" And foundDash = True Then
            retval = retval + Mid(s, i, 1)
        Else
            foundDash = False
            retval = ""
        End If
    Next
    onlyDigits = firstDashPosition
End Function
函数仅将数字(作为字符串)作为整数
Dim retval As String“这是返回字符串。”
Dim i为整数“字符位置计数器”
将第一个位置设置为整数
Dim-foundDash作为布尔值
foundDash=False
firstDashPosition=0
调试。打印s
retval=“”
对于i=1到Len(s)
如果Mid(s,i,1)喜欢“-”,那么
如果foundDash=True,则
retval=retval+“-”
firstDashPosition=i
onlyDigits=firstDashPosition-6
退出功能
如果结束
调试。打印“此处”
foundDash=True
retval=retval+“-”

如果Mid(s,i,1)>=“0”和Mid(s,i,1)我想我是在漫长的一天之后累了。如果有人感兴趣,下面是代码,我在问题中编辑了它

Function onlyDigits(s As String) As Integer
    Dim retval As String    ' This is the return string.      '
    Dim i As Integer        ' Counter for character position. '
    Dim firstDashPosition As Integer
    Dim foundDash As Boolean
    foundDash = False
    firstDashPosition = 0

    Debug.Print s
    retval = ""

    For i = 1 To Len(s)
        If Mid(s, i, 1) Like "-" Then
            If foundDash = True Then
                retval = retval + "-"
                firstDashPosition = i
                onlyDigits = firstDashPosition - 6
                Exit Function
            End If

            Debug.Print "here"
            foundDash = True
            retval = retval + "-"
        ElseIf Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" And foundDash = True Then
            retval = retval + Mid(s, i, 1)
        Else
            foundDash = False
            retval = ""
        End If
    Next
    onlyDigits = firstDashPosition
End Function
函数仅将数字(作为字符串)作为整数
Dim retval As String“这是返回字符串。”
Dim i为整数“字符位置计数器”
将第一个位置设置为整数
Dim-foundDash作为布尔值
foundDash=False
firstDashPosition=0
调试。打印s
retval=“”
对于i=1到Len(s)
如果Mid(s,i,1)喜欢“-”,那么
如果foundDash=True,则
retval=retval+“-”
firstDashPosition=i
onlyDigits=firstDashPosition-6
退出功能
如果结束
调试。打印“此处”
foundDash=True
retval=retval+“-”

ElseIf Mid(s,i,1)>=“0”和Mid(s,i,1)正则表达式可能是更好的解决方案,但简单的一次性解决方案可能是

Function onlyDigits(s As String) As Integer

    Dim i As Integer
    For i = 1 To Len(s)

        If Mid$(s, 1, 6) Like "-[0-9][0-9][0-9][0-9]-" Then
           onlyDigits = i
           Exit Function
        EndIf
    Next

    onlyDigits = -1

End Function

关于VBA中的正则表达式可能是一个很好的起点,您也可以使用
str-Like“-[0-9][0-9][0-9][0-9]-”
希望我知道这个lol