从字符串中删除:Excel中列中出现的所有单词

时间:2017-01-08 19:32:38

标签: 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"

目前,我一直在反复使用= SUBSTITUTE()函数:

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

然而,使用该公式,“Icecream”中的“I”将被删除,并且公式本身必须变得非常长,以便容纳A列中的数百个单元格。

我发现同样笨重的另一个选择是在单元格B1上使用= SPLIT()函数将字符串的每个单词分隔到它自己的单元格(单元格C1:Z1),然后使用:

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

等...

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

我很好奇是否有更好的方法来解决这个问题,既不需要写一篇文章长公式,也不需要使用数千个单元格和公式来分隔每个单词并单独检查。

谢谢!

泰勒

3 个答案:

答案 0 :(得分: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窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从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!
      

答案 1 :(得分:0)

使用Google表格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)>

答案 2 :(得分:0)

如果它少于大约10个左右的唯一单词,你知道要删除的是什么,你可以只复制列,Ctrl + H和查找/替换该单词,然后重复,直到你将它们全部删除