从字符串中删除所有初始数字,直到达到非数字字符
Posted
技术标签:
【中文标题】从字符串中删除所有初始数字,直到达到非数字字符【英文标题】:Remove all initial numbers from string until non-numerical character is reached 【发布时间】:2017-01-13 14:52:58 【问题描述】:我正在尝试删除字符串的第一个数字(删除所有数字,直到到达第一个非数字字符)。一些字符串的起始数字格式为"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!
函数是否正确编写?你有什么建议吗?
谢谢
【问题讨论】:
我会调查Range.Characters
和CHR()
。
【参考方案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
【讨论】:
【参考方案2】:Alex K 的好解决方案。
我想补充一点,原始程序的基本问题是 iserror not 捕获数字转换错误 - 一旦发生,整个函数就会退出,你只会得到一个值错误,因为未设置 RemoveNumbers。此外,当您离开(txt,i)=“14”时,错误不会发生,但只有在您离开(txt,i)=“14 2”时才会发生在下一个字符上。为了让它工作,你必须做这样的事情
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
【讨论】:
以上是关于从字符串中删除所有初始数字,直到达到非数字字符的主要内容,如果未能解决你的问题,请参考以下文章
从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)