Excel VBA - Удалить текст слева / справа от строки переменной длины - PullRequest
0 голосов
/ 18 декабря 2018

Я использую приведенный ниже VBA-код, чтобы сделать текст между "!"символы, выделенные жирным шрифтом (пример:! пример !.).

Теперь я хочу убрать "!"с левой и правой стороны текста.Как мне это сделать?

Sub change()
Dim r As Range, st As String, boo As Boolean
Dim L As Long, i As Long
Dim rng As Range: Set rng = Application.Range("Auswertung!A1:D100")

For Each r In rng.Cells

    st = r.Text
    boo = False
    L = Len(st)
    For i = 1 To L
        If Mid(st, i, 1) = "!" Then
            boo = Not boo
        Else
            If boo Then r.Characters(i, 1).Font.Bold = True

        End If
    Next i
Next r 
End Sub

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Если вы разделите восклицательные знаки, вы автоматически удалите их.Текст может быть воскрешен с помощью Join, а массив из разбиения позволяет выделять несколько элементов жирным шрифтом.

Обрабатывая каждый жирный раздел целиком и пропуская не выделенные жирным шрифтом разделы, это должно быть существенно более эффективным, чем«ходьба» через содержимое ячейки по одному символу за раз.

Sub changeBold()
    Dim r As Range, rng As Range
    Dim tmp As Variant, i As Long, p As Long

    'Set rng = Application.Range("Auswertung!A1:D100")
    Set rng = Application.Range("sheet6!A2:A5")

    For Each r In rng.Cells

        p = 0
        tmp = Split(r.Text, "!")
        r = Join(tmp, vbNullString)

        For i = LBound(tmp) To UBound(tmp) - 1 Step 2
            With r.Characters(p + Len(tmp(i)) + 1, Len(tmp(i + 1)))
                .Font.Bold = True
                .Font.Color = vbRed
            End With
            p = p + Len(tmp(i)) + Len(tmp(i + 1))
        Next i

    Next r

End Sub

enter image description here

0 голосов
/ 18 декабря 2018

Вы также можете использовать регулярные выражения - на мой взгляд, очень недоиспользуемые возможности VBA.

Dim r1 As New RegExp
Dim r2 As New RegExp
r1.Pattern = "^!"
r2.Pattern = "!$"

st = r1.Replace(st, "")
st = r2.Replace(st, "")

Атом ^ означает «начинается с», а атом $ означает «заканчивается на. "

Кроме того, вы можете извлечь совпадение между восклицательными знаками, используя регулярное выражение захвата () атомов:

Dim r As New RegExp
Dim m As MatchCollection
r.Pattern = "^!(.+)!$"

Set m = r.Execute(st)
If m.Count > 0 Then
  st = m.Item(0).SubMatches.Item(0)
End If

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

!I like Pie!  It's delicious!!

Поддержка Regex может быть добавлена ​​в любой проект VBA путем добавления ссылки на «Регулярные выражения Microsoft VBScript 5.5.»

0 голосов
/ 18 декабря 2018

innerString = replace (fullString, "!", "")

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