因此,我一直在使用包含学校名称列表的电子表格。我从该电子表格中提取数据,创建一个限制每个单元格中文本大小的名册。为了让学校名称适合,我必须从名称中删除学校类型。
例如:原名称 => 处理后的名称
- 通用基础 => 通用
- 未命名中学 => 未命名
- 跨镇高中 => 跨镇
由于有些学校名称有两个单词长,因此我无法查找第一个空格。我可以使用高度嵌套的 IF 语句来实现这一点。
=IFERROR(LEFT(J2,FIND("Elementary",J2)-2),IFERROR(LEFT(J2,FIND("Middle",J2)-2),IFERROR(LEFT(J2,FIND("High",J2)-2),J2)))
这个解决方案的问题是它太长了。我想要的是一种让 FIND 函数搜索多个文本字符串的方法。我觉得这样可以把这个公式简化为更容易阅读的形式。
有人有什么想法吗?有没有更优雅的方法来做到这一点?
提前致谢
答案1
Datatoo 抢先了一步 (+1)。
如果你想要一种不涉及公式的替代方案,你总是可以使用 Excel 的查找和替换--
- Ctrl+H
- 类型 ”中学“(单词前有一个空格)找什么盒子
- 离开用。。。来代替空的。
- 全部替换
- 对要从单元格中删除的每个单词/短语重复此操作。
附录:
如果您准备使用自定义函数,请尝试以下操作:
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包含全文(“非常酷的中学”)和D1:D3包含要从单元格中删除的字符串(例如“中学”、“高中”、“小学”)
答案2
也许不是更优雅,但更短,并且存在与你相同的关于区分大小写的问题。如果学校结尾字符串不一致,则会出现问题,但也许是一致的。
=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)
这很快,并且会查找这些特定的字符串,而不是部分字符串,如果你有像“Middleton Elementary School”这样的学校,只查找“middle”就会出错
答案3
在 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);"")
显然,您可以根据自己的需要进行调整。