Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 删除行中的第二个短划线_Vba_Excel - Fatal编程技术网

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