数字是否在String中的特定位置?

时间:2019-08-28 13:12:56

标签: vba

我只想知道是否可以检查字符串中特定位置是否有数字

Sub test()

Dim a As String
a = "TestTestTest12"

'If (the 13th and the 14th positon are numbers) Then ...

End Sub

4 个答案:

答案 0 :(得分:1)

使用以下内容:

Function IsNumberAtPosition(s As String, pos As Integer) As Boolean
  IsNumberAtPosition = IsNumeric(Mid(s, pos, 1))
End Function

用法:

IsNumberAtPosition("TestTestTest12", 13)

答案 1 :(得分:0)

这是我用来检查整个字符串的一些代码,只是想分享一下,但是如果您只想检查特定的部分,您已经有了更好的答案。

Sub test()

my_string = "TestTestTest12"

Dim buff() As String
ReDim buff(Len(my_string) - 1)
For i = 1 To Len(my_string)
    buff(i - 1) = Mid$(my_string, i, 1)
    char = buff(i - 1)
    MsgBox char
    If IsNumeric(char) = True Then
        MsgBox char & " = Number"
    End If
Next

End Sub

答案 2 :(得分:0)

我认为@EyIM答案几乎可以满足任何情况。但是我也喜欢@FreeSoftwareServers的思路。让我详细说明一下:一谈到位置,数组就感觉很自然。您想将字符串当作数组来对待。无论如何,我会的。因此,作为替代方案,并结合已经给出的答案,可能看起来像这样:

Option Explicit

Dim MyStringArray() As String
Dim str As String

'run example
Sub Test()
    str = "TestTestTest12"
    MyStringArray = StringToArray(str)
    Debug.Print IsPositionNumeric(MyStringArray, 12)
    Debug.Print IsPositionNumeric(MyStringArray, 13)
    Debug.Print IsPositionNumeric(MyStringArray, 14)
End Sub

'return if character at position p in array arr is numeric
Function IsPositionNumeric(ByRef arr() As String, p As Integer) As Boolean
    IsPositionNumeric = IsNumeric(arr(p - 1)) '- 1 because string position is 1-based
End Function

'take string s and make it into array
Function StringToArray(ByRef s As String) As String()

    'define temp array
    Dim tmpArray() As String

    'set dimension of array to match string length
    ReDim tmpArray(Len(s))

    'assign each character in string s to array
    Dim i As Integer
    For i = 1 To Len(s)
        tmpArray(i - 1) = Mid$(s, i, 1) 'remember that (by default), arrays are 0-bound, so - 1
    Next i

    StringToArray = tmpArray

End Function

这使您可以像对待数组一样访问字符串,就像.Net中的穷人版ToCharArray()一样。当然,这可能是彻底的过度杀伤力。例如,它会对每个字符都执行“昂贵”的Mid(string, position, length),尽管只有一次。之后,您只需从数组中检索元素即可,这更快。因此,要测试的位置数与要测试的字符串的长度之间是一个平衡。

答案 3 :(得分:-1)

使用正则表达式: /(\ d +)/克 匹配并获得职位。