从string中删除:在Excel中出现在列中的所有单词

我已经find了解决这个问题的方法 – 但是我很难想象没有比我更简单的解决scheme。

假设在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" 

目前,我一直在使用= SUBSTITUTE()函数,像这样:

 =PROPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1, $A$1, ""), $A$2, ""),$A$3, ""), $A$4, "")) 

然而,用这个公式,“Icecream”中的“I”将被删除,为了容纳A列中的数百个单元格,公式本身必须变得非常可笑。

我发现的另一个选项同样笨拙的是在单元格B1上使用= SPLIT()函数将string的每个单词分隔成自己的单元格(单元格C1:Z1),然后使用:

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

等等…

在单元格AA1:AZ1删除不需要的单词。 然后最后在单元格BA1中使用a = CONCATENATE()公式将所有单元格放回到所需的string中。 这个公式在“Icecream”中也会遇到“I”的问题,所以我find的唯一解决方法是在A列中的每个单词前后放置空格,并在B1中的string之前和之后添加空格。

我很好奇,如果有更好的方法来处理这个问题,不需要写一篇散文长的公式,或者使用数千个单元格和公式来分隔每个单词并单独检查。

谢谢!

泰勒

使用Google表格REGEXREPLACEJOIN函数,示例正则expression式可以是:

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

其中(?i)是一个忽略情况标志, \b是词边界, ()是一个捕获组。

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

Trimfunction还可以删除单词之间的多余空格。 Excel 2016具有TextJoin函数,但是没有RegEx函数(可以使用VBA UDF)。

Microsoft Word 使用通配符具有类似但有限的模式匹配,但在Word中join模式将会非常具有挑战性。 示例通配符在Word中replace模式: <(Until|I|Have|The)>

考虑下面的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 

例如:

在这里输入图像说明

因为比较是区分大小写的,所以我在列A中包括了小写和正确的情况。

用户定义的函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

 =nojunk(B1,A1:A8) 

要了解有关macros的更多信息,请参阅:

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! 

如果less于10个左右,你知道要删除什么的唯一的单词,你可以复制列Ctrl + H和查找/replace这个单词,并重复,直到你把它们全部删除。