VBA Обрезать строку из персонажа, если персонаж найден - PullRequest
0 голосов
/ 26 сентября 2019

Это, вероятно, задавали миллион раз в разных вариациях, но я не могу найти подходящий ответ.

У меня есть строка, содержащая до 4 идентификаторов MUT ("MUT", за которыми следуют 5 цифр).например, MUT00761).Если существует несколько идентификаторов, они разделяются пробелом.В некоторых случаях также может быть * между двумя идентификаторами (например, MUT00761 * MUT00684).* Ассоциируется с идентификатором MUT слева.Мне нужно удалить все эти идентификаторы MUT (и их *), если таковые имеются.

EG, "MUT00111 MUT00222 * MUT00333 MUT00444 *" должен стать "MUT00111 MUT00333".

Ответы [ 5 ]

0 голосов
/ 26 сентября 2019

Вы можете использовать функцию Split() следующим образом:

Function GiveItAName(s As String) As String
    Dim res As String
    Dim v As Variant, w As Variant
    Dim i As Long, j As Long

    v = Split(s, " *")
    For j = 0 To UBound(v) - 1
        w = Split(v(j), " ")
        For i = 0 To UBound(w) - 1
            res = res & w(i) & " "
        Next
    Next
    GiveItAName = WorksheetFunction.Trim(res & v(j))
End Function
0 голосов
/ 26 сентября 2019

Я бы использовал пользовательскую функцию для этого.Это может быть немного неуклюжим, но это должно работать:

Function StripText(ByVal fullText As String) As String

newText = ""
lastIndex = 1
curIndex = InStr(1, fullText, " *")

If curIndex = 0 Then   '// if no instances of " *" are found then just copy the full text
    newText = fullText
Else
    Do While (curIndex > 0)   '// do until no instances of " *" are found
        newText = newText & Mid(fullText, lastIndex, curIndex - lastIndex - 9)
        lastIndex = curIndex + 2
        curIndex = InStr(lastIndex + 1, fullText, " *")
    Loop
End If

StripText = newText

End Function
0 голосов
/ 26 сентября 2019

1) получить позицию 1-го MUT с помощью чего-нибудь instr (1, wholeText, "MUT" [,…])

2) вырезать MUT плюс x символов или до следующего "," с помощью

3) делать снова, пока MUT не найден

0 голосов
/ 26 сентября 2019

Используйте библиотеку Microsoft VBScript Regular Expresions 5.5 для замены экземпляров 'MUT *' на vbNullString.

ИЛИ

Если вы не используете Regex, простая функция, такая как

Public Function StripStarredIds(ByVal IdString As String) As String

    Do While InStr(IdString, "*")

        IdString = Replace(IdString, Mid$(IdString, InStr(IdString, "*") - 10, 10), vbNullString)

    Loop

    StripStarredIds = IdString

End Function
0 голосов
/ 26 сентября 2019

Формула рабочего листа

=IFERROR(TRIM(SUBSTITUTE(A1,MID(A1,FIND("*",A1)-9,10),"")),A1)


VBA UDF

Function MUT(S as String) as String
    On Error Resume Next
    MUT = Trim(Replace(S, Mid(S, InStr(1, S, "*") - 9, 10), vbNullString))
    If CBool(Err.Number) Then MUT = S
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...