Заменить несколько элементов в одном столбце - PullRequest
1 голос
/ 18 апреля 2020

У меня есть один столбец с именами (Имя, Фамилия), но иногда к ним добавляются сертификаты, оценки и пр. c (например: «Джон Смитс MBA»; «Сьюзен Смитс FCA, ACCA») , Количество переменных бесчисленное, но я определил наиболее распространенные (их много). Пожалуйста, помогите, как собрать макрос для очистки этого? Я использовал один за другим с:

Selection.Replace What:=" FCA,", Replacement:=" ", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=True, _
        ReplaceFormat:=False

Но я думаю, что должен быть более эффективный способ построить этот макрос (и редактировать в случае, когда обнаружено новое "нежелательное расширение).

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Попробуйте этот код

Sub Test()
Dim e, a, i As Long

Application.ScreenUpdating = False
    For Each e In Array("MBA", "FCA", "ACCA", ", ")
        Columns(1).Replace e, "", 2
    Next e

    With Range("A1", Cells(Rows.Count, "A").End(xlUp))
        .Value = Evaluate(Replace("IF(COLUMN(@)=1,TRIM(@),TRIM(PROPER(@)))", "@", .Address))
    End With
Application.ScreenUpdating = True
End Sub
0 голосов
/ 18 апреля 2020

Я предполагаю, что все сертификаты и оценки состоят из 3-4 букв в конце имен, и все это в верхнем регистре. Попробуйте код, основанный на этом сценарии.

Sub Test()

Dim name As String

i = 2
name = Range("A" & i).Value

While name <> ""

If Right(name, 4) = UCase(Right(name, 4)) Then
Range("A" & i).Value = Left(name, Len(name) - 4)

ElseIf Right(name, 3) = UCase(Right(name, 3)) Then
Range("A" & i).Value = Left(name, Len(name) - 3)
End If

i = i + 1
name = Range("A" & i).Value
Wend

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