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

时间:2016-04-25 08:11:15

标签: excel excel-vba excel-formula vba

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

HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
hm.put(1,10);
hm.put(2,45);
hm.put(3,100);
Iterator<Integer> it = hm.keySet().iterator();
Integer fk = it.next();
Integer max = hm.get(fk);
while(it.hasNext()) {
    Integer k = it.next();
    Integer val = hm.get(k);
    if (val > max){
         max = val;
         fk=k;
    }
}
System.out.println("Max Value "+max+" is associated with "+fk+" key");

我需要删除花括号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))。如您所见,这是这些花括号之间的第一个文本实例。

如果我们在SUBSTITUTE中使用此内容,请执行以下操作:{[%emt 0:00:05]}

我得到这样的输出:

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

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

3 个答案:

答案 0 :(得分:3)

突出显示一切 去替换 在要替换的文本中输入{*} 留下替换为空白

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

答案 1 :(得分:1)

尝试用户定义的功能。在VBA中创建对&#34; 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

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

如果你想在VBA中测试它:

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

输出&#34; Rc8 Rxc8&#34;

答案 2 :(得分:1)

如果没有VBA,这并不容易,但还有一种方法。

要么(正如yu_ominae所建议的那样)只使用这样的公式并自动填充它:

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

另一种方法是迭代计算(转到选项 - &gt;公式 - &gt;检查“启用迭代计算”按钮)
要在一个单元格中执行此操作,您需要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进行,但没有正则表达式,您只需将其放入模块中即可:

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)

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