2016-11-26 2 views
2

У меня есть строки с номерами в ней. Цифры выглядят так: 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 из-за первой тире. Как я могу это решить?

ответ

3

Из ваших примеров видно, что все допустимые значения имеют длину символов. Поэтому, чтобы удалить ненужные данные справа, используйте:

=LEFT(A1,8) 

и копировать.

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 находит положение п-й знак, и эта одна задается в качестве параметра функция Left(). Чтобы увидеть его работу, просто select диапазон со значениями, которые вы хотите отрезать и запустите TestMe.

Имейте славную субботу! :)

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 
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 
Смежные вопросы