Excel表示法,使FIND能够查找多个字符串


2

所以我一直在使用一个包含学校名称列表的电子表格。我从此电子表格中提取数据以创建一个限制每个单元格中文本大小的名单。为了让学校名称合适,我必须从名称中删除学校类型。

示例:原始名称=>处理名称

  • Generic Elementary =>通用
  • 未命名的中学=>无名
  • 跨城镇高中=>穿越城镇

我找不到第一个空间,因为有些学校的名字长了两个字。我已经能够使用高度嵌套的IF语句来完成这项工作。

=IFERROR(LEFT(J2,FIND("Elementary",J2)-2),IFERROR(LEFT(J2,FIND("Middle",J2)-2),IFERROR(LEFT(J2,FIND("High",J2)-2),J2)))

我对这个解决方案的问题是它真的很长。我想要的是让FIND函数搜索多个文本字符串的方法。我觉得这会把这个公式减少到更容易阅读的东西。

有没有人有任何想法?有没有更优雅的方式来做到这一点?

提前致谢

Answers:


1

Datatoo打败了我(+1)。
如果你想要一个不涉及公式的替代方案,你可以随时使用Excel 查找和替换 -

  1. 按Ctrl + H
  2. 输入“ 初中 “(在这个词之前有一个空格)进入 找什么
  3. 离开 用。。。来代替 空。
  4. 全部替换
  5. 对要从单元格中删除的每个单词/短语重复上述步骤。

附录:
如果您要使用自定义功能,请尝试以下方法:

Option Compare Text
Public Function REPLACETEXT(src As Range, crt As Range) As String
s = Trim(src.Value)
    For Each c In crt
        If InStr(1, s, Trim(c.Value)) Then newstr = Replace(s, Trim(c.Value), "")
    Next c
REPLACETEXT = newstr
End Function

ALT + F11 。将代码粘贴到新模块中。

用法:

=REPLACETEXT(A1,D1:D3)

哪里 A1 包含全文(“Really Cool Middle School”)和 D1:D3 包含要从单元格中删除的字符串(例如“中学”,“高中”,“小学”)


+ 1这是最简单的方法,除非您因某些原因需要保留原件
datatoo

而且如果你必须搜索一个bajillion子串,宏或公式将是一个更好的解决方案。
Ellesa

像这个更简单的功能,它是适应性的。
datatoo

虽然我个人的偏见是避免Excel中的功能,但我不得不承认这是我希望的最佳解决方案。谢谢!
Doltknuckle

3

也许不是更优雅,但更短,并且与案例敏感度相同的问题。如果学校结束字符串不一致,可能会出现问题。

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J2,"Elementary",""),"Middle School",""),"High School","")

有人可能会创建一个更优雅的用户定义函数,但您可以将其添加到工作簿中的模块。

 Public Function schType(Cell As String) As String
   If InStr(1, LCase(Cell), "elementary school") > 0 Then schType = Replace(Cell, "elementary school", "")
   If InStr(1, LCase(Cell), "high school") > 0 Then schType = Replace(Cell, "high school", "")
   If InStr(1, LCase(Cell), "middle school") > 0 Then schType = Replace(Cell, "middle school", "")
 End Function

然后在你想要的单元格= schType(J2)
这很快就找到了这些特定的字符串,而不是在你可能有像“米德尔顿小学”这样的学校的情况下的部分字符串,只是寻找“中间”就会弄错


这确实比我拥有的嵌套混乱更好。我想知道你是否可以通过在那里找到一个搜索运营商来进一步减少这一点。我基本上想删除一些东西,如果它匹配三个字符串中的任何一个。这样做一次一个。
Doltknuckle

0

在B1:B4中放入“小学”,“中学”,“高中”,“”。 然后,假设您的列表在列J中,并且您希望列K中的已处理列表,请在K2中输入以下公式,使用Ctrl + Shift + Enter确认并向下复制。

=SUBSTITUTE(J2;INDEX(B$1:B$4;MIN(IF(ISERROR(FIND(B$1:B$4;J2));999;ROW(B$1:B$4)))-ROW(B$1)+1);"")

显然,你可以根据自己的需要进行调整。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.