Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 数字是否在字符串中的特定位置?_Vba - Fatal编程技术网

Vba 数字是否在字符串中的特定位置?

Vba 数字是否在字符串中的特定位置?,vba,Vba,我只是想知道是否有可能检查字符串中某个特定位置是否有数字 子测试() 像线一样变暗 a=“test12” “如果(第13位和第14位是数字),那么。。。 端接头 使用以下内容: Function IsNumberAtPosition(s As String, pos As Integer) As Boolean IsNumberAtPosition = IsNumeric(Mid(s, pos, 1)) End Function 用法: IsNumberAtPosition("TestTe

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

子测试()
像线一样变暗
a=“test12”
“如果(第13位和第14位是数字),那么。。。
端接头
使用以下内容:

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

IsNumberAtPosition("TestTestTest12", 13)
使用以下内容:

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

IsNumberAtPosition("TestTestTest12", 13)
使用正则表达式: /(\d+)/g 匹配并获取位置。

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

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

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

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

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

我认为对于几乎任何情况,@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中穷人版本的
tocharray()
一样。诚然,这可能完全是矫枉过正。首先,它对每个字符执行“昂贵的”
Mid(字符串、位置、长度)
,尽管只执行一次。之后,您只需从数组中检索一个元素,这会更快。因此,要测试的位置数和要测试的字符串长度之间有一个平衡。

我认为对于几乎任何场景,@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中穷人版本的
tocharray()
一样。诚然,这可能完全是矫枉过正。首先,它对每个字符执行“昂贵的”
Mid(字符串、位置、长度)
,尽管只执行一次。之后,您只需从数组中检索一个元素,这会更快。因此,要测试的位置数和要测试的字符串长度之间有一个平衡。

看看
Mid$
函数。伙计,我真不敢相信有多少人在
VBA
标签上随时准备提供帮助!这太棒了:)我们都在工作中使用VBA。@Felix我能从我的工作中得到任何反馈吗。至少如果你的问题解决了,我可以请你接受答案吗?善良的Regards@Felix如果这个问题解决了,我可以请你接受一个答案吗?点击查看
Mid$
功能。伙计,我真不敢相信有多少人在
VBA
标签上随时准备提供帮助!这太棒了:)我们都在工作中使用VBA。@Felix我能从我的工作中得到任何反馈吗。至少如果你的问题解决了,我可以请你接受答案吗?善良的Regards@Felix如果这个问题解决了,我可以请你接受一个答案吗?单击“为什么不将其从字符串开始到
Len(str)
”的
循环中,然后从MEI中获得+1如果您有很多位置要测试,您的性能可以从测试字符串中受益,将其放入“字符”数组中(VBA没有给出该类型,从技术上讲,它是一个由1个字符组成的字符串数组),然后测试数组元素是否为IsNumeric。这样,您就可以避免在每个要测试的位置的字符串上循环。为什么不将它从字符串的开头到
Len(str)
,在
for
循环中进行包装,如果您有很多位置要测试,那么您可以从Mei获得+1,测试字符串,将其放入“字符”数组(VBA没有给出该类型,从技术上讲,它将是一个由1个字符字符串组成的数组),然后测试数组元素的IsNumeric,这样,您可以避免在每个要测试的位置的字符串上循环。这对我来说更像是一个注释,而不是答案。它还使用了VB没有的javascript
/
语法。@GSerg lol,好像您看不到在VB中如何表示\d+表达式一样。有时你需要使用一些搜索技巧,而不仅仅是复制和粘贴。我觉得这更多的是一个注释,而不是答案。它还使用了VB没有的javascript
/
语法。@GSerg lol好像你看不到在VB中\d+表达式是如何表示的。有时你需要使用一些搜索技巧,而不仅仅是复制和粘贴。如果有帮助,请随时投票。我投的票比大多数人多,但为什么不呢?我随意投赞成票和反对票。我不确定你的用例,也许这会有帮助,也许其他答案会更好。我真想知道你为什么分配这个字符串数组,每个原始字符一个元素。这似乎没有任何用处。这个答案有用,但这不是最好的办法。。GSerg指出,您将使用太多的CPUAs,其中有许多不必要的代码。整个
buff
char
分配/分配可以减少到
如果是数值(Mid$(my_string,i,1))=True
如果有帮助,请随意投票。我投的票比大多数人多,但为什么不呢?我随意投赞成票和反对票。我不确定你的用例,也许这会有帮助,也许其他答案会更好。我真想知道你为什么分配这个字符串数组,每个原始字符一个元素。这似乎没有任何用处。这个答案有用,但这不是最好的办法。。GSerg指出,您将使用太多的CPUAs,其中有许多不必要的代码。如果是数值(Mid$(my_字符串,i,1))=True,则整个
buff
char
分配/分配可以减少为