我的行中有数字。数字如下:A-123456
,A-123456-P
,A-387785
,F-489186
,T-826926-P-2
。
所以我需要在结尾处使用-P
或-P-2
的所有号码将其删除,因此只剩下前半部分:A-123456-P
---> A-123456
,T-826926-P-2
---> T-826926
。
我试图通过首先找到并替换所有P*
来做到这一点。但是在剩下的每个数字的末尾都留给我-
。我想我不能只找到*-
并将其替换为空,因为它会因为第一个短划线而留给我A
。我该如何解决?
答案 0 :(得分:3)
从您的示例中可以明显看出,所有有效值的长度都为 8 个字符。因此,要删除右侧不需要的数据,请使用:
=LEFT(A1,8)
并复制下来。
答案 1 :(得分:1)
如果您有完整的电子表格,可以执行以下操作:
Option Explicit
Function l_find_position(sInputString As String, sFindWhat As String, l_position As Long) As Long
Dim l_counter As Long
Application.Volatile
l_find_position = 0
For l_counter = 1 To l_position
l_find_position = InStr(l_find_position + 1, sInputString, sFindWhat)
If l_find_position = 0 Then Exit For
Next
End Function
Public Sub TestMe()
Dim my_cell As Range
For Each my_cell In Selection
On Error Resume Next
my_cell = Left(my_cell, l_find_position(my_cell.Text, "-", 2) - 1)
On Error GoTo 0
Next my_cell
End Sub
实际上,函数l_find_position
定位第n个符号的位置,这个符号作为Left()函数的参数给出。要查看它是否有效,只需select
包含您要剪切的值的范围并运行TestMe
。
祝周六愉快! :)
答案 2 :(得分:1)
假设直到第二个' - '的文本长度不总是8个字符,那么使用以下公式:
=LEFT(A1,FIND(CHAR(8),SUBSTITUTE(A1,"-",CHAR(8),2))-1)
因为它可以用公式完成,所以在vba中只需使用
with application.worksheetfunctions
result = .left(rng, .find(chr(8), .substitute(rng, "-", chr(8), 2) - 1)
end with
答案 3 :(得分:0)
让rng
成为您拥有此值的范围:
On Error GoTo Next
For Each r in rng.Cells
If Right(r.Value, 2) = "-P" Then
r.Value = Mid(r.Value, 0, Len(r.Value) - 2)
End If
If Right(r.Value, 4) = "-P-2" Then
r.Value = Mid(r.Value, 0, Len(r.Value) - 4)
End If
Next r
On Error GoTo 0