Замена строки текста, когда известно только определенное количество символов - PullRequest
1 голос
/ 01 апреля 2019

У меня есть список номеров PO.Они выглядят примерно так (4010059877-TUR36036133 или TUR6039716 ## 4010073239).Мне нужно иметь возможность сузить ячейку только до номера PO, который является номером 4010059877.Единственная непротиворечивая часть в части, которую я хочу исключить, это "TUR ########".

Я работал над кодом, который исключает все нечисловые символы, но некоторые ячейки имеют эти "TUR #".Я работал над поиском и заменой подстановочным знаком "*".Я также искал в Интернете и не видел ничего подобного.

Найти и заменить предпринятый код

Sub Replace()

    Columns("AJ").Replace What:="TUR*", _
                          Replacement:="", _
                          LookAt:=xlPart, _
                          SearchOrder:=xlByRows, _
                          MatchCase:=False, _
                          SearchFormat:=False, _
                          ReplaceFormat:=False 
End Sub

Замена всех нецифровых символов, которые оставляют нежелательные числа за TUR ########

Dim finRow As String
finRow = Sheets("Data").Range("A20000").End(xlUp).Row

Set myRange = Sheets("Data").Range("AK2:AK" & finRow)
For Each myCell In myRange
    LastString = ""
    For I = 1 To Len(myCell.Value)
        mT = Mid(myCell.Value, I, 1)
        If mT Like "[0-9]" Then
            tString = mT
        Else
            tString = ""
        End If
        LastString = LastString & tString
    Next I
    myCell.Value = LastString
Next

Мой ожидаемый результат - исключить TUR ######## и заменить его ничем.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Вы можете использовать функцию InStr (), а затем использовать ее для поддержки Left, например:

loc = instr(mycell,"TUR")
val = left(mycell.value,loc-1)

Edit1:

Из-за SJRкомментарий, добавит пример обработки проблемы, когда «TUR» найден в позиции 1:

loc = instr(mycell,"TUR")
if loc = 1 then
    val = ""
else
    val = left(mycell.value,loc-1)    
end if

Edit2:

Dim val as long 'assumes you will only have a number in the end
val = right(left(mycell.value,12),11)
mycell.value = val

Thisдолжен обрезать первую скобку и не иметь проблем с информацией после 11-значного PO.Это может даже относиться к случаю (переключатель), где instr (mycell.value, "TUR") имеет значение true, если у вас есть другие возможные сценарии.

0 голосов
/ 01 апреля 2019

Мы также можем попробовать сделать замену регулярного выражения:

Dim Regex As System.Text.RegularExpressions.Regex
Dim input As String = "4010059877-TUR36036133"
Dim output As String = Regex.Replace(input, "([0-9]+)-TUR[0-9]+", "$1")
Console.WriteLine(output)

Это выводит: 4010059877

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...