【问题标题】:Remove Text Within Cell Starting with String and Ending with Character删除单元格内以字符串开头并以字符结尾的文本
【发布时间】:2020-06-10 07:59:21
【问题描述】:

我一直在努力弄清楚如何删除以某些文本开头并以字符结尾的文本:

我在 Excel 中有一个可以包含字符串的单元格:

[#1-一些文本][#4-更多文本][#7-一些附加文本]

[#4-一些额外的文字][#7-一些额外的文字]

我需要删除 [#4-Some more text],但保留剩余的文本

视觉:

我想使用 VBA 删除“[#4-Some More Text]”,但是那个字符串可能不同,字符串会

  • 始终以“[#”开头
  • 然后是一个数字(在不同的搜索中可能会有所不同,但我可以通过编程方式获得)
  • 然后是“-”(破折号)
  • 然后是一些不同的文本
  • 然后以“]”结尾

我正在以编程方式创建第一部分“[#4-”(因为数字可能会改变),并且 sn-p 始终以方括号结尾,中间的文本可能不同

我尝试调整多个其他帖子: Remove text appearing between two characters - multiple instances - Excel Remove text that is between two specific characters of a string 但似乎无法正确处理。

有人可以帮助或指导我解决类似的情况吗?

谢谢!

【问题讨论】:

  • [#4-Some more text] 并不总是相同,但总是以方括号、# 符号、数字和破折号开头...然后是一些文字...然后以方括号
  • 它们都以[可以更改的数字-开头,并且包含#的权利吗?并以 ][#.. 等结尾。 ?如果没有更好更清晰的 excel 示例,很难看到发生了什么,你能编辑一下吗? .但是计算单元格中 ['s 或 ][ 的数量可以为您提供关键/线索。
  • 刚刚编辑过,大卫,希望有助于澄清
  • 不太清楚您的要求,但拆分功能对您有用吗? Splt(YourText,"[#")(X) 其中X 是元素编号。要正确使用它,您可以将其放入变量数组中,例如 MyArr = Splt(YourText,"[#") 然后您可以使用数组的边界找到最后一个,例如 msgbox MyArr(ubound(MyArr)),它将显示最后一个元素。将 ubound 更改为 lbound 将显示第一个。
  • 哇,原来这是拆分文本和获取剩余长度的组合,多亏了你们两个带领我朝着正确的方向前进。我非常着迷于尝试使其他解决方案发挥作用,却忽略了简单性。清理完代码后,我会更新答案 - 谢谢!!

标签: excel vba


【解决方案1】:

正则表达式应该可以帮助你

Sub test()

    Dim s As String

    s = "[#1-Some text][#4-some more text][#7-Some additional text]"

    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Pattern = "\[#4-[a-zA-Z ]+\]"
        .ignorecase = True
        Debug.Print .Replace(s, vbNullString)
   End With

End Sub

【讨论】:

  • 让它与 Split 和 Len(以及 Right$)的组合一起使用,但这也有效,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多