2017-01-08 49 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和查找/替换该字并重复,直到你把它们全部删除。

相关问题