删除出现在两个字符之间的文本 – 多个实例 – Excel

在Microsoft Excel文件中,我有一个行中的文本,如下所示:

1. Rc8 {[%emt 0:00:05]} Rxc8 {[%emt 0:00:01]} 2. Rxc8 {[%emt 0:00:01]} Qxc8 {} 3. Qe7# 1-0 

我需要删除出现在花括号{}中的任何文本,包括括号本身。

在上面的例子中,有三个这样的花括号的例子。 但有些行可能不止于此。

我尝试了=MID(LEFT(A2,FIND("}",A2)-1),FIND("{",A2)+1,LEN(A2))

这将输出到: {[%emt 0:00:05]} 。 正如你所看到的,这是花括号之间的第一个文本实例。

如果我们在这样的SUBSTITUTE内使用这个: =SUBSTITUTE(A2,MID(LEFT(A2,FIND("}",A2)),FIND("{",A2),LEN(A2)),"")

我得到这样的输出:

1. Rc8 Rxc8 {[%emt 0:00:01]} 2. Rxc8 {[%emt 0:00:01]} Qxc8 {} 3. Qe7# 1-0

如果您注意到,只有一个实例被删除。 我如何使它适用于所有实例? 谢谢。

没有VBA就不那么容易,但还是有办法的。

或者(正如yu_ominae所build议的),只需使用这样的公式并自动填充:

 =IFERROR(SUBSTITUTE(A2,MID(LEFT(A2,FIND("}",A2)),FIND("{",A2),LEN(A2)),""),A2) 

另一种方法是迭代计算(进入选项 – >公式 – >检查“启用迭代计算”button)
要在一个单元格中执行此操作,需要1个辅助单元(对于我的示例,我们将使用C1 ),并在B2中使用像这样的公式并自动填充:

 =IF($C$1,A2,IFERROR(SUBSTITUTE(B2,MID(LEFT(B2,FIND("}",B2)),FIND("{",B2),LEN(B2)),""),B2)) 

在C1中放置“1”,在B:B中的所有公式将显示A:A的值。 现在去C1,敲几次Del键(你会看到“{}” – 部分消失),直到看起来像你想要的。

编辑 :要做到这一点通过VBA,但没有正则expression式,你可以简单地把它放到一个模块:

 Public Function DELBRC(ByVal str As String) As String While InStr(str, "{") > 0 And InStr(str, "}") > InStr(str, "{") str = Left(str, InStr(str, "{") - 1) & Mid(str, InStr(str, "}") + 1) Wend DELBRC = Trim(str) End Function 

然后在工作表中直接使用:

 =DELBRC(A2) 

如果您还有任何问题,请询问;)

尝试用户定义的function。 在VBA中创build“Microsoft VBScript Regular Expressions 5.5”的引用,然后将此代码添加到模块中。

 Function RemoveTags(ByVal Value As String) As String Dim rx As New RegExp rx.Global = True rx.Pattern = " ?{.*?}" RemoveTags = Trim(rx.Replace(Value, "")) End Function 

在单元格的工作表中input: =RemoveTags(A1)或任何您想要删除文本的地址。

如果你想在VBA中testing它:

 Sub test() Dim a As String a = "Rc8 {[%emt 0:00:05]} Rxc8 {[%emt 0:00:01]}" Debug.Print RemoveTags(a) End Sub 

输出“Rc8 Rxc8”

突出显示所有内容去replace在文本中input{*}以将空白replacereplace为空白

这应该取代所有的花括号和它们之间的任何东西