2017-01-13 9 views
1

文字列の最初の数字を削除しようとしています(数値以外の最初の文字に達するまで数字をすべて削除します)。一部の文字列は、"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

ような何かをしなければならないでしょう。 – 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

良いソリューション

: charがスペースがある場合
は、その数はスペースに置き換えるとそうでない場合は削除先頭のスペースで文字列を返し、何もしません元のプログラムの基本的な問題は、iserrorがではないということです。は、数値変換エラーをキャッチします。すべての関数が終了すると、RemoveNumbersが設定されていないため、値エラーが発生します。また、(txt、i)= "14"を残しているときにエラーは発生しませんが、(txt、i)= "14 2"のままにしておけば次の文字にのみエラーが発生します。それを動作させるために、あなたは、私が `Range.Characters`と` CHR() `になります。この

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 
関連する問題