2017-01-13 1 views
1

문자열의 첫 번째 숫자를 제거하려고합니다 (처음 숫자가 아닌 문자에 도달 할 때까지 모든 숫자를 제거하십시오). 일부 문자열의 시작 번호는 "14 214"의 형식으로되어 있으며 14214이어야합니다. 이 분리 숫자에 대한 특별한 공간이며, A1에서 문자열이 다음 14 214에 의해 시작하면숫자가 아닌 문자에 도달 할 때까지 문자열의 모든 초기 숫자를 제거하십시오.

ISNUMBER(LEFT(A1,3)*1)=TRUE 

은 그래서 난 그냥 첫 번째 숫자가 아닌 문자를 확인해야 공간이 문제가되지 않습니다 것을 의미한다.

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를 반환

나는 다음 VBA 기능의 생각했다!

함수가 올바르게 작성 되었습니까? 의견 있으십니까?

감사합니다.

+0

'Range.Characters'와'CHR()'을 살펴볼 것입니다. – Kyle

답변

1

각 문자를보고 왼쪽에서 오른쪽으로 문자열을 따라 걷습니다. 난 그냥하고 싶은 알렉스 K.에서

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

좋은 솔루션

: 숯불에 공백 인 경우
는 숫자 공백으로 교체 그렇지 않으면 제거 된 선행 공백과 문자열을 반환, 아무것도하지 않고 원래 프로그램의 기본적인 문제는 iserror가 이 아니고이 아니라면 전체 함수가 종료되고 RemoveNumbers가 설정되지 않았기 때문에 값 오류가 발생하는 것처럼 숫자 변환 오류를 포착한다는 것입니다. 또한 (txt, i) = "14 2"를 남겨 두었을 때 오류는 발생하지 않지만 (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 
관련 문제