Excel - VBA: как заменить последние 3 символа, если они равны "..." - PullRequest
1 голос
/ 28 мая 2020

Пожалуйста, не могли бы вы мне немного помочь? Я полный новичок, ничего не знаю о программировании.

У меня есть следующий код, который заменяет двойные пробелы на одинарные и удаляет "...", если он находится в начале выбранной ячейки (ячеек).

Sub Test()
  Dim X As Long, Cell As Range
  For Each Cell In Selection
    For X = Len(Cell.Text) To 1 Step -1
      If Cell.Characters(X - 1, 2).Text = "  " Then Cell.Characters(X, 1).Text = ""
      If Cell.Characters(1, 3).Text = "..." Then Cell.Characters(1, 3).Text = ""
    Next
  Next
End Sub

Не могли бы вы скажите мне, как я могу изменить часть If Cell.Characters (1, 3) .Text так, чтобы она удаляла «...», если это в конце выбранной ячейки ( с)?

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Это не так просто, как может показаться, поскольку Excel имеет склонность преобразовывать три точки в многоточие, что делает его неузнаваемым одиночным символом по сравнению с точкой (или тремя). Кроме того, вам не нужно использовать l oop символов 1 на 1, вместо этого вы можете использовать Like, чтобы проверить, заканчивается ли ячейка тремя точками или, скорее, многоточием. Рядом с этим мы можем обрезать лишние пробелы в Range в одном go, используя Application.Trim(), как показано здесь .

Итак, давайте посмотрим на пример данных, например:

enter image description here

Затем, если мы выберем эти Range и go над его ячейками, используя, например:

Sub Test()

Dim cl As Range
For Each cl In Selection
    If cl.Value Like "*..." Then
        cl.Value = Left(cl.Value, Len(cl.Value) - 3)
    ElseIf cl.Value Like "*" & ChrW(8230) Then
        cl.Value = Left(cl.Value, Len(cl.Value) - 1)
    End If
Next
Selection.Value = Application.Trim(Selection)

End Sub

тогда результаты будут:

enter image description here


И ради забавных альтернатив, подход RegEx:

Sub Test2()

Dim cl As Range
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "…$|\.{3}$"
    For Each cl In Selection
        cl.Value = .Replace(cl.Value, "")
    Next
End With
Selection.Value = Application.Trim(Selection)

End Sub
0 голосов
/ 28 мая 2020

Думаю, вы можете использовать Characters(1,3).Insert(""), чтобы изменить текст

Sub Test()
Dim c As Range
Selection.Value = Application.Trim(Selection)
For Each c In Selection
      If c.Characters(1,3).Text = "..." Then c.Characters(1,3).Insert("")
Next
End Sub


0 голосов
/ 28 мая 2020

Может быть, это может вам помочь: используйте метод replace, чтобы заменить два пробела на один. Чтобы найти три точки вначале, используйте левый метод, а если это так, вырежьте его правым методом. Здесь нужно быть осторожным. Excel часто заменяет три точки символом 133. Так что у вас есть дополнительные возможности для проверки.

Sub Test()
  Dim cell As Range
  For Each cell In Selection

    cell.Value = Replace(cell.Value, "  ", " ")

    If Left(cell.Value, 3) = "..." Then
        cell.Value = Right(cell.Value, Len(cell.Value) - 3)
    End If

    If Left(cell.Value, 1) = Chr(133) Then
        cell.Value = Right(cell.Value, Len(cell.Value) - 1)
    End If

  Next

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