如何提取数字直到使用Excel 2010在string中达到空格?

我需要从下面的string拉代码:72381testing蠕虫的4Dx。 代码是72381,我正在使用的函数做了一个很好的工作,从string中拉出所有的数字,然后返回723814,从代码的描述中拉出4。 实际的代码只是72381.代码长度不一,在描述开始之前总是跟着一个空格。 但是在描述中也有空格。 这是我使用的function,我从以前的search中find:

Function OnlyNums(sWord As String) Dim sChar As String Dim x As Integer Dim sTemp As String sTemp = "" For x = 1 To Len(sWord) sChar = Mid(sWord, x, 1) If Asc(sChar) >= 48 And _ Asc(sChar) <= 57 Then sTemp = sTemp & sChar End If Next OnlyNums = Val(sTemp) End Function 

您正在寻找查找function..例如:

在这里输入图像说明

或在VBA instr()和left() 在这里输入图像说明

既然你知道该模式总是代码后面的空格,只需使用left的string的字符数到第一个空间find使用instr 。 在上面的即时窗口中采样。 循环会很慢,而且它可能会validation它们是数字,为什么要知道模式是代码然后空间?

如果string的说明部分中的第一个字符不是数字,则可以使用VBA Val(string)函数返回第一个非数字字符之前的所有数字字符。

 Function GetNum(sWord As String) GetNum = Val(sWord) End Function 

请参阅Val(string)函数的语法以了解其用法的完整详细信息。

在C#代码的类似情况下,我发现空间字符的第一个实例(32)之后,我早点离开循环。 在VBA中,你可以使用Exit For。

你可以完全摆脱这个function,并使用这个:

 split("72381 Test 4Dx for Worms"," ")(0) 

这将使用“”作为分割字符将string拆分成数组。 然后它显示我们在数组中的地址0(第一个元素)

在你的函数的上下文中,如果你已经死了使用一个它是这样的:

 Function OnlyNums(sWord As String) OnlyNums = Split(sWord, " ")(0) End Function 

虽然我喜欢Mark解决scheme的简单性,但是您可以使用下面的高效parsing器,通过字符search来改善您的字符(以处理不以数字开头的string)。

testing

 Sub test() MsgBox StrOut("72381 Test 4Dx") End Sub 

 Function StrOut(strIn As String) Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Pattern = "^(\d+)(\s.+)$" If .test(strIn) Then StrOut = .Replace(strIn, "$1") Else StrOut = "no match" End If End With End Function