删除最后一个string后缀vba

我想知道是否有一种更有效的方法来删除单元格值中的最后一个string值。

在我的情况下,我需要删除一个后缀ie

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])))" 

但因为我需要为整个AZ做这个。 有什么办法吗?

一个稍简单的公式方法:

 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做到这一点。

下面将循环任何选定的单元格,如果最后一个字符是一个字母(不是数字或特殊字符),那么单元格中的最后一个字符将被删除

  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 

将其粘贴到工作簿中需要使用的模块中。
它将摆脱所有非数字后缀(您可能有多个字符删除)。
您可以直接在Excel中使用它,例如=RemoveSuffix(D1)或在VBA循环中

 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 

填写E栏:

 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