2017-01-08 85 views
1

我找到了解決此問題的方法 - 但我很難想象沒有比我更簡單的解決方案。從字符串中刪除:在Excel中出現在列中的所有單詞

讓我們在列A假設,我在他們下面的話細胞...

A1: Until 
A2: I 
A3: The 
A4: Have 

而在B1單元格,我有這樣的句子:

"Until further notice, I have closed the Icecream store" 

在小區C1,我想它返回:

"Further Notice, Closed Icecream Store" 

目前,我已經一遍又一遍地用=替換()函數是這樣的:

=PROPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1, $A$1, ""), $A$2, ""),$A$3, ""), $A$4, "")) 
與式中,「I」在「冰淇淋」將被刪除,並且公式本身

但是將具有長的離譜成爲以容納數百細胞在列A

另一個選項我發現,同樣作爲笨重是使用= SPLIT()函數對細胞B1到字符串的每個字(小區C1:Z1)分離成它自己的細胞,然後使用:

=IF(ISNUMBER(SEARCH(C1,$A$1:$A,1)),"",C1) 
=IF(ISNUMBER(SEARCH(D1,$A$1:$A,1)),"",D1) 

etc ...

在單元格AA1:AZ1中刪除不需要的單詞。然後最後在Cell BA1中使用a = CONCATENATE()公式將所有單元格放回到所需的字符串中。這個公式在「Icecream」中也會遇到「I」問題,所以我找到的唯一解決方法是在A列中的每個單詞之前和之後放置空格,並在B1中的字符串之前和之後添加空格。

我很好奇,如果有更好的方法來解決這個問題,既不需要寫一篇散文長的公式,也不需要使用數千個單元格和公式來分隔每個單詞並單獨檢查。

謝謝!

泰勒

+0

你究竟想要達到什麼目的?你正在描述你做了什麼,但不是理想的期望結果。 – dgorti

+0

如果這是一個選項,Google表格'REGEXREPLACE'和'JOIN'函數更容易 – Slai

+0

谷歌表格中的REGEXREPLACE似乎是一個不錯的選擇。你能否詳細說明這將如何用於「正則表達式」的多個輸入? –

回答

0

隨着谷歌表REGEXREPLACEJOIN函數,樣品的正則表達式可以是:

(?i)\b(Until|I|Have|The)\b 

其中(?i)是一個忽略大小寫標誌,\b是字邊界,並()是捕獲組。

=PROPER(TRIM(REGEXREPLACE(B1, "(?i)\b(" & JOIN("|", A1:A4) & ")\b", ""))) 

Trim函數還可以刪除單詞之間的多餘空格。 Excel 2016有TextJoin函數,但是沒有RegEx函數(可以使用VBA UDF)。

Microsoft Word具有類似但有限的模式匹配using wildcards,但加入Word中的模式將太具有挑戰性。 Word中的示例通配符替換模式:<(Until|I|Have|The)>

+0

這是完美的。非常感謝。除了單詞之外,是否可以使用符號(*&%_-。'等...)和數字? –

+0

@ TylerSobel-Mason是的,屬於RE2語法的特殊標點符號必須使用「\」(例如「\\(」)進行轉義(但是,如果數字沒有轉義出來,應該可以轉換)。到文本,但我認爲'加入'功能會照顧到這一點。 – Slai

0

考慮以下UDF()

Public Function NoJunk(r1 As Range, r2 As Range) As String 
    Dim ary(), r As Range 
    temp = " " & r1.Text & " " 
    ReDim ary(1 To r2.Count) 

    i = 1 
    For Each r In r2 
     ary(i) = " " & r.Text & " " 
     i = i + 1 
    Next r 
    For i = 1 To r2.Count 
     temp = Replace(temp, ary(i), " ") 
    Next i 

    NoJunk = Application.WorksheetFunction.Trim(temp) 

End Function 

例如:

enter image description here

由於比較是大小寫敏感的,我已包括兩個小寫並在列A

用戶定義函數(UDF)是非常容易安裝和使用:

  1. ALT-F11帶來了VBE窗口
  2. ALT-I ALT + M打開一個新的模塊
  3. 貼東西進入並關閉VBE窗口

如果保存工作簿,UDF將隨之保存。 如果您正在使用一個版本的Excel更高然後2003,你必須保存 該文件作爲.XLSM而非的.xlsx

要刪除UDF:

  1. 彈出窗口VBE如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

從Excel使用UDF:

=nojunk(B1,A1:A8) 

要了解更多關於一般的宏,請參閱:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

以及有關UDF的細節,請參見:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Macros must be enabled for this to work! 
0

如果它小於〜10個左右,那麼您知道要刪除的唯一字,您可以只複製列Ctrl + H和查找/替換該字並重復,直到你把它們全部刪除。

相關問題