2016-04-25 34 views
1

在Microsoft Excel文件,我在行的文本出現這樣的:刪除兩個字符之間出現的文字 - 多個實例 - 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(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

如果你已經注意到了,只有一個實例被刪除。我如何讓它適用於所有實例?謝謝。

+0

你開到使用VBA編寫自定義功能做到這一點?或者,您是否可以在表單中多次重複您的功能以刪除所有字符串? –

+0

有幾千行。我認爲自定義功能可能會更好。我已經使用了@ dirk-reichel的功能,它完美地工作。 –

回答

1

不無VBA那麼容易,但STIL我有辦法。

是(通過yu_ominae的建議),只要用這樣和公式的自動填充:

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

另一種方法是迭代計算(進入選項 - >配方 - >勾選「啓用迭代計算」按鈕)
現在要做到這一點在一個單元格,則需要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) 

如果仍有任何問題,請問;)

0

嘗試用戶定義的函數。在VBA創建引用爲「Microsoft VBScript的正則表達式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 

輸出 「RC8 RXC8」

0

突出顯示所有內容 轉至替換 輸入{*}在文本,以取代 留下空白

更換這應該替換所有的花括號和任何在他們之間

相關問題