Удаление предложения, которое начинается с указанной строки c, но заканчивается по-другому - PullRequest
0 голосов
/ 27 февраля 2020

Мой VBA немного ржавый. У меня следующая проблема: у меня есть столбец, который содержит метки для вопросника, и есть много дополнительных слов, прикрепленных к каждому ярлыку, что делает их практически нечитаемыми. Предложения, от которых мне нужно избавиться, очень похожи, но имеют различную пунктуацию и могут появляться в начале ячейки в середине. Все предложения начинаются со слова «Использование». Вот несколько примеров ячеек, которые мне нужно очистить (3 основных типа):

1) "ABC123: - Using a scale of 1 to 5 ... . SomeText1" (предложение по удалению начинается с "Использование" и заканчивается ".")

2) "DEF456: - Using a 1 to 5 point scale ... : SomeText2" (предложение для удаления начинается с «Использование» и заканчивается ":")

3) "SomeTextLongerThan20Characters - Using a 1-5 point sca" (предложение для удаления начинается в середине ячейки и обрезается в в центре)

Мне нужно, чтобы эти 3 случая выглядели так:

1) "ABC123: SomeText1"

2) "DEF456: SomeText2"

3) "SomeTextLongerThan20Characters"

Вот мой код, который я не смог заставить работать:


Sub Edit_String()
'
' Edit_String Macro
' Replaces chosen string with another string or nothing
'

    Dim MyRange, c As Range
    Dim strA, strB As String



    For Each c In MyRange
        Select Case Left(c.Text, 20)
            Case Left(c.Text, 20) Like "*- Using*"
                strA = "- Using*."
            Case Left(c.Text, 20) Like "*: Using*"
             strA = "- Using*:"
    '       Case Else
    '          If Left(c.Text, 20) <> "*Using*" Then strA = "- Using*"
    End Select


    Selection.Replace What:=strA, Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False


Next c

MsgBox ("macro finished running")

End Sub

Последний Case Else закомментирован, так как я решил, что он мне не нужен.

Буду признателен за любую помощь. Это похоже на простую проблему с подстановочными знаками / найти / заменить, но я не могу понять это.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Если ваш оригинальный код работает для вас, кроме заявления случая. Это приведет к тому, что оператор case будет работать.

Sub Edit_String()
'
' Edit_String Macro
' Replaces chosen string with another string or nothing
'

Dim MyRange, c As Range
Dim strA, strB As String

[A1] = "ABC123: - Using a scale of 1 to 5. ... . SomeText1"
[A2] = "DEF456: - Using a 1 to 5 point scale ... : SomeText2"
[A3] = "SomeTextLongerThan20Characters - Using a 1-5 point sca"
Set MyRange = [a1:a3]


For Each c In MyRange
    c.Select
    Select Case True
        Case Left(c.Text, 20) Like "*- Using*"
            strA = "- Using*."
        Case Left(c.Text, 20) Like "*: Using*"
         strA = "- Using*:"
'       Case Else
'          If Left(c.Text, 20) <> "*Using*" Then strA = "- Using*"
End Select


Selection.Replace What:=strA, Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

Next c
0 голосов
/ 28 февраля 2020

Вы должны иметь возможность поместить следующее в пустую книгу для тестирования.

Sub GetSentence()

Dim MyRange, c As Range
Dim strA, strB As String
Dim SplitItUp As Variant
Dim LeftPart, RightPart As String

[A1] = "ABC123: - Using a scale of 1 to 5. ... . SomeText1"
[A2] = "DEF456: - Using a 1 to 5 point scale ... : SomeText2"
[A3] = "SomeTextLongerThan20Characters - Using a 1-5 point sca"
Set MyRange = [a1:a3]
UsingLit = " - Using"

For Each c In MyRange
    SplitItUp = Split(c.Value, UsingLit)
    If UBound(SplitItUp) = 0 Then
        Debug.Print UsingLit + " Not Found"
    Else
        LeftPart = Trim(SplitItUp(0))
        RightPart = Trim(SplitItUp(UBound(SplitItUp)))
        If InStr(RightPart, ":") Then
            SplitItUp = Split(c.Value, ":")
            RightPart = SplitItUp(UBound(SplitItUp))
        Else
            SplitItUp = Split(c.Value, ".")
            If UBound(SplitItUp) > 0 Then
                RightPart = SplitItUp(UBound(SplitItUp))
            Else
                RightPart = ""
            End If
        End If
    End If
    Debug.Print LeftPart + " " + RightPart
Next c

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