Vba 删除行中的第二个短划线
我有几行,里面有数字。编号如下:Vba 删除行中的第二个短划线,vba,excel,Vba,Excel,我有几行,里面有数字。编号如下:A-123456,A-123456-P,A-387785,F-489186,T-826926-P-2 因此,我需要所有结尾带有-p或-p-2的数字来删除它,所以只剩下前一半:A-123456-p-->A-123456,T-826926-p-2T-826926 我试图通过首先查找并替换所有p*来实现这一点。但它给我留下了-在每一个剩余的数字的末尾。我想我不能只找到*-而什么都不替换,因为第一个破折号会给我留下A。如何解决它?从您的示例中可以明显看出,所有有效值的长度
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
。如何解决它?从您的示例中可以明显看出,所有有效值的长度都是8个字符。因此,要删除右侧不需要的数据,请使用:
=LEFT(A1,8)
然后向下复制。如果您有完整的电子表格,您可以执行以下操作:
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()函数的参数给出。要查看它的工作情况,只需选择包含要剪切和运行的值的范围TestMe
祝你周六愉快!:) 让
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
假设第二个'-'之前的文本长度不总是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