我正在尝试删除一串字符的第一个数字(删除所有数字,直到达到第一个非数字字符)。某些字符串的起始数字格式为"14 214"
,其中应显示14214
。这是用于分隔数字的特殊空间,如果A1中的字符串以14 214
开头,那么
ISNUMBER(LEFT(A1,3)*1)=TRUE
这意味着空间不是问题,我只需要检查第一个非数字字符。
我想到了以下VBA功能:
Function RemoveNumbers(Txt As String) As String
i = 1
Do While i < 9
If (IsError(Left(Txt, i) * 1)) = "False" Then
i = i + 1
Else
RemoveNumbers = Right(Txt, Len(Txt) - i)
End If
Loop
End Function
但它返回#VALUE!
功能是否正确写入?你有什么建议吗?
由于
答案 0 :(得分:1)
从左到右沿着弦走,看着每个角色。
如果char是空格什么都不做,如果它的数字用空格替换它,否则返回删除了前导空格的字符串:
Function RemoveNumbers(txt As String) As String
Dim i As Long
For i = 1 To Len(txt)
Select Case Mid$(txt, i, 1)
Case " ":
Case "0" To "9": Mid$(txt, i, 1) = " "
Case Else
Exit For
End Select
Next
RemoveNumbers = LTrim$(txt)
End Function
答案 1 :(得分:0)
Alex K的好解决方案。
我想补充说原始程序的基本问题是iserror 不捕获数字转换错误 - 只要发生整个函数退出并且你只是得到一个值错误,因为未设置RemoveNumbers。你离开(txt,i)=&#34; 14&#34;时也不会出现错误,但是当你离开时(txt,i)=&#34; 14只会出现在下一个字符上2&#34 ;.为了使它工作,你将不得不做这样的事情
Function RemoveNumbers(Txt As String) As String
On Error GoTo Handler
i = 1
Do While i <= Len(Txt)
firstNumber = Left(Txt, i) * 1
i = i + 1
Loop
Handler:
RemoveNumbers = Right(Txt, Len(Txt) - i + 1)
End Function