2017-02-02 22 views
3

セル値の最後の文字列値を削除する方が効率的な方法があるのだろうかと思います。最後の文字列接尾辞vbaを削除する

私の場合は、接尾辞すなわち

TNV1602000014C  //delete suffix C 
117239B    //delete suffix B 
MRV117299   //nothing to delete 
115365Z    //delete suffix Z   

を削除する必要があり、私は

lastrow = Cells(Rows.Count, "C").End(xlUp).Row 
Range("E2:E" & lastrow).Formula = "=TRIM(RIGHT(SUBSTITUTE(RC[-1],""A"",REPT("""",LEN(RC[-1]))),LEN(RC[-1])))" 

このアプローチを試みたが、私は、全体のA-Zのためにこれを行う必要があるため。 はありますか?

答えて

3

Aを少し簡単な式のアプローチ:

lastRow = Cells(Rows.Count, "C").End(xlUp).Row 
Range("E2:E" & lastRow).FormulaR1C1 = "=left(RC[-1],LEN(RC[-1])-ISERROR(RIGHT(RC[-1])+0))" 

また、必要に応じてEvaluateを使用して適切な処理を行うこともできます。

+1

素敵なロリー、とてもいい – brettdj

+0

@brettdj:いつものように!^^ – R3uK

+1

gahddd ..ありがとう!はるかに簡単で清潔です。 :D – Anne

1

内のモジュールでこれを貼り付け以下ループは、任意のセルを選択し、最後の文字が文字(非数または特殊文字)である場合、セル内の最後の文字が

Sub RemoveTrailingLetter() 
    Dim c As Range 

    'Replace Selection With Your Range 
    For Each c In Selection 
     'If The Last Character Is A Letter 
     If IsLetter(Right(c, 1)) Then 
      'Remove The Last Character 
      c = Left(c, Len(c) - 1) 
     End If 
    Next c 

End Sub 

Function IsLetter(strValue As String) As Boolean 
Dim intPos As Integer 

    For intPos = 1 To Len(strValue) 
     Select Case Asc(Mid(strValue, intPos, 1)) 
      Case 65 To 90, 97 To 122 
       IsLetter = True 
      Case Else 
       IsLetter = False 
       Exit For 
     End Select 
    Next 

End Function 
+0

ありがとう@ジミニー!これは完全に動作します! – Anne

+0

そのための関数を作成するのではなく、 'Not IsNumeric(...)'を使用してみませんか? – R3uK

+0

@ R3uKこれは句読点を許可するので、私は元のポスターが必要ではないと信じています –

1

を除去しますあなたはそれを使用する必要があるブック。
数字以外の接尾辞をすべて削除します(複数の文字を削除することがあります)。
あなたは直接、列Eを満たすために

Public Function RemoveSuffix(ByVal StringToClean As String) As String 
    Dim i As Integer 

    If IsNumeric(Right(StringToClean, 1)) Then 
     RemoveSuffix = Trim(StringToClean) 
    Else 
     i = 1 
     Do While Not IsNumeric(Mid(StringToClean, Len(StringToClean) - i, 1)) 
      i = i + 1 
     Loop 
     RemoveSuffix = Trim(Left(StringToClean, Len(StringToClean) - i)) 
    End If 
End Function 

=RemoveSuffix(D1)のようなまたはVBAのループでは、Excelでそれを使用することができます。

lastrow = Cells(Rows.Count, "C").End(xlUp).Row 
Range("E2:E" & lastrow).FormulaR1C1 = "=RemoveSuffix(RC[-1])" 

または列D上書きする:

lastrow = Cells(Rows.Count, "C").End(xlUp).Row 
for i = 2 to lastrow 
    Cells(i,4).Value = RemoveSuffix(Cells(i,4).Value) 
next i 
+0

ありがとうございました:D – Anne

+0

@Anne:ようこそ!これは、削除する複数の文字を持っている場合は非常に便利ですが、削除する必要がある場合は、Roryの式がきれいです! ;) – R3uK

+0

私はこれを私のコードの中にも書いておきます:あなたの努力に感謝! :D – Anne

関連する問題