【问题标题】:Excel - VBA : How do I replace the last 3 characters if they are "..."Excel - VBA:如果最后 3 个字符是“...”,我该如何替换它们
【发布时间】:2020-09-15 17:30:58
【问题描述】:

请你帮我一下好吗?我是一个完整的初学者,我对编程一无所知。

我有以下代码将双空格更改为单空格并删除“...”,如果它位于所选单元格的开头。

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 部分,以便在 结尾处删除“...” /strong> 选定的单元格?

【问题讨论】:

  • 我已经回答了您的问题,假设您有兴趣从值的 end 中删除 ...。但是,在您的代码上方,您提到了单元格的开头。你能纠正吗?

标签: excel vba


【解决方案1】:

这并不像看起来那么容易,因为Excel 倾向于将三个点调整为省略号,使其成为与一个点(或三个点)相比无法识别的单个字符。此外,您不需要逐个循环字符,而是可以使用Like 检查单元格是否以三个点结尾,或者更确切地说是省略号。接下来,我们可以使用Application.Trim() 一次性修剪Range 中多余的空格字符,如图所示here

让我们看一下示例数据:

然后如果我们选择这个Range 并使用例如:

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

结果将是:


为了有趣的选择,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

【讨论】:

  • 感谢您对三个点的澄清。我想知道为什么我的答案不起作用!
  • @BrianMStafford 使用插入(“”)
  • 感谢您的帮助。它有效,但它删除了单元格中的所有格式,所以我不能使用这个:(
  • 这在你的问题@Dunno123 中值得一提。
【解决方案2】:

也许这可以帮助您:使用替换方法将两个空格变为一个空格。要在开始时搜索三个点,请使用左侧方法,如果是这种情况,请使用右侧方法将其删除。在这里你必须小心。 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

【讨论】:

    【解决方案3】:

    我觉得你可以用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
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-16
      • 2021-11-16
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多