从字符串中删除所有初始数字,直到达到非数字字符

时间:2017-01-13 14:52:59

标签: excel vba excel-vba excel-formula

我正在尝试删除一串字符的第一个数字(删除所有数字,直到达到第一个非数字字符)。某些字符串的起始数字格式为"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!

功能是否正确写入?你有什么建议吗?

由于

2 个答案:

答案 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