删除行

时间:2016-11-26 12:39:43

标签: excel vba excel-vba

我的行中有数字。数字如下:A-123456A-123456-PA-387785F-489186T-826926-P-2

所以我需要在结尾处使用-P-P-2的所有号码将其删除,因此只剩下前半部分:A-123456-P ---> A-123456T-826926-P-2 ---> T-826926

我试图通过首先找到并替换所有P*来做到这一点。但是在剩下的每个数字的末尾都留给我-。我想我不能只找到*-并将其替换为空,因为它会因为第一个短划线而留给我A。我该如何解决?

4 个答案:

答案 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