2017-01-13 2 views
1

Я пытаюсь удалить первые числа строки символов (удалите все числа до тех пор, пока не будет достигнут первый нелимический символ). Некоторые строки имеют стартовые номера, отформатированные в форме "14 214", где он должен читать 14214. Это специальное пространство для разделения чисел, и если строка в А1 начинается 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

Я бы посмотрел на 'Range.Characters' и' CHR() '. – Kyle

ответ

1

Прогулка вдоль строки слева направо, глядя на каждого персонажа.
Если полукокс пространство ничего не делать, если его номер заменить его пробелом в противном случае возвращает строку с ведущими пробелами удалены:

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 
0

Хорошее решение от Alex K.

Я бы так же, как добавить, что основная проблема с исходной программой заключалась в том, что iserror делает не улавливает ошибку преобразования числа - как только это происходит, вся функция завершается, и вы просто получаете ошибку значения, потому что 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 
Смежные вопросы