Table of contents
该教程解释了Excel FIND和SEARCH函数的语法,并提供了高级非琐碎用途的公式示例。
在上一篇文章中,我们介绍了Excel查找和替换对话框的基本原理。 然而,在许多情况下,你可能希望Excel根据你的标准自动查找和提取其他单元格中的数据。 因此,让我们仔细看看Excel的搜索功能有什么用处。
Excel的FIND功能
Excel中的FIND函数用于返回一个文本字符串中的特定字符或子串的位置。
Excel查找功能的语法如下。
FIND(find_text, within_text, [start_num])前两个参数是必须的,最后一个参数是可选的。
- 搜索_文本 - 你想找到的字符或子串。
- 内_文 - 要搜索的文本字符串,通常以单元格引用的形式提供,但你也可以直接在公式中输入字符串。
- 开始_num - 一个可选的参数,用于指定搜索从哪个字符开始。 如果省略,搜索将从 within_text 字符串的第一个字符开始。
如果FIND函数没有找到find_text字符,将返回一个#VALUE!错误。
例如,该公式 =FIND("d", "查找")
返回4,因为 "d "是单词""中的第四个字母。 发现 ".公式 =FIND("a", "查找")
返回一个错误,因为在" "中没有 "a"。 发现 ".
Excel的FIND功能--需要记住的事情
要在Excel中正确使用FIND公式,请牢记以下简单的事实。
- FIND函数是 区分大小写 如果你正在寻找一个不区分大小写的匹配,请使用搜索功能。
- Excel中的FIND函数不允许使用 通配符 .
- 如果find_text参数包含几个字符,FIND函数会返回到 第一个字符 例如,公式FIND("ap", "happy")返回2,因为 "a "是 "happy "这个词的第二个字母。
- 如果 within_text 包含 数次发生的情况 例如,FIND("l", "hello")返回3,这是 "hello "一词中第一个 "l "字符的位置。
- 如果find_text是一个 空字符串 "",Excel的FIND公式返回搜索字符串中的第一个字符。
- Excel的FIND函数返回 #VALUE!错误 如果发生以下任何情况。
- Find_text不存在于within_text中。
- Start_num包含的字符比 within_text多。
- Start_num是0(零)或一个负数。
Excel的搜索功能
Excel中的SEARCH函数与FIND非常相似,它也会返回文本字符串中子串的位置。 其语法和参数与FIND相似。
SEARCH(find_text, within_text, [start_num])与FIND不同,SEARCH功能是 不区分大小写 而且它允许使用通配符,如下例所示。
这里有几个基本的Excel搜索公式。
=SEARCH("市场", "超级市场")
返回6,因为子串 "market "从单词 "supermarket "的第6个字符开始。
=SEARCH("e", "Excel")
返回1,因为 "e "是 "Excel "这个词的第一个字符,忽略了大小写。
与FIND一样,Excel的SEARCH函数在下列情况下返回#VALUE!错误。
- find_text参数的值没有找到。
- start_num参数大于within_text的长度。
- Start_num等于或小于0。
在本教程的后面,你会发现一些更有意义的公式例子,演示如何在Excel工作表中使用SEARCH函数。
Excel FIND与Excel SEARCH
如前所述,Excel中的FIND和SEARCH函数在语法和用途上非常相似。 然而,它们确实有一些区别。
1.区分大小写的FIND与不区分大小写的SEARCH
Excel的SEARCH和FIND函数之间最本质的区别是SEARCH是不分大小写的,而FIND是分大小写的。
例如,SEARCH("e", "Excel")返回1,因为它忽略了 "E "的大小写,而FIND("e", "Excel")返回4,因为它介意大小写。
2.用通配符搜索
与FIND不同,Excel的SEARCH函数在find_text参数中接受通配符。
- 一个问号(?)匹配一个字符,而
- 星号(*)匹配任何系列的字符。
为了了解它在真实数据上是如何工作的,请考虑以下例子。
正如你在上面的截图中看到的,公式SEARCH("function*2013", A2)返回子串中第一个字符("f")的位置,如果 within_text 参数中提到的文本字符串同时包含 "function "和 "2013",无论中间有多少其他字符。
提示:要找到一个实际的问号(?)或星号(*),请在相应的字符前输入一个斜体字(~)。
Excel中的FIND和SEARCH公式示例
在实践中,Excel的FIND和SEARCH函数很少单独使用,通常情况下,你会将它们与其他函数(如MID、LEFT或RIGHT)结合起来使用,下面的公式例子展示了一些实际应用。
例1.寻找一个在给定字符之前或之后的字符串
这个例子显示了如何在一个文本字符串中找到并提取特定字符左边或右边的所有字符。 为了使事情更容易理解,请考虑以下例子。
假设你有一列名字(A列),你想把名字和姓氏拉到不同的列中。
要获得名字,可以用FIND(或SEARCH)与LEFT功能结合使用。
=left(a2, find(" ", a2)-1)
或
=left(a2, search(" ", a2)-1)
正如你可能知道的,Excel LEFT函数返回一个字符串中最左边的指定字符数。 而你使用FIND函数来确定空格("")的位置,让LEFT函数知道要提取多少个字符。 这时,你从空格的位置减去1,因为你不希望返回的值包括空格。
要提取姓氏,请使用RIGHT、FIND/SEARCH和LEN函数的组合。 需要使用LEN函数来获得字符串中的总字符数,从中减去空格的位置。
=right(a2,len(a2)-find(" ",a2))
或
=right(a2,len(a2)-search(" ",a2))
下面的屏幕截图展示了这一结果。
对于更复杂的情况,如提取中间名或分割带有后缀的名字,请看如何在Excel中使用公式分割单元格。
例2.查找文本串中第N次出现的给定字符
假设你在A列有一些文本字符串,例如SKU的列表,你想找到 第2次 下面的公式很有效。
=find("-", a2, find("-",a2)+1)
前两个参数很容易解释:定位A2单元格中的破折号("-")。 在第三个参数(start_num)中,你嵌入了另一个FIND函数,告诉Excel从第一个出现的破折号(FIND("-",A2)+1)之后的字符开始搜索。
要返回的位置 第三次发生 ,你将上述公式嵌入另一个FIND函数的start_num参数中,并在返回值上加2。
=find("-",a2, find("-",a2, find("-",a2)+1) +2)
另一种可能更简单的方法是使用Excel的FIND函数与CHAR和SUBSTITUTE相结合,来查找某个字符的第N次出现。
=find(char(1),substitution(a2,"-",char(1),3))
其中"-"是有关的字符,"3 "是你想找到的第N次出现的字符。
在上述公式中,SUBSTITUTE函数用CHAR(1)替换了第3次出现的破折号("-"),这是ASCII系统中不可打印的 "标题开始 "字符。 你可以用1到31的任何其他不可打印的字符代替CHAR(1)。 然后,FIND函数返回该字符在文本串中的位置。 所以,一般公式如下。
find(char(1),substitute( 电池 , 特征 ,CHAR(1)。 第N次发生 ))乍一看,上述公式似乎没有什么实际价值,但接下来的例子将显示它们在解决实际任务中是多么有用。
注意:请记住,Excel的FIND函数是区分大小写的。 在我们的例子中,这没有什么区别,但如果你在处理字母时,你想要一个 不区分大小写 匹配,使用SEARCH功能而不是FIND。
例3.提取某个字符后面的N个字符
要在任何文本字符串中找到一个给定长度的子字符串,可以使用Excel FIND或Excel SEARCH与MID函数相结合。 下面的例子演示了如何在实践中使用这种公式。
在我们的SKU列表中,假设你想找到第一个破折号后的前3个字符,并把它们拉到另一列。
如果第一个破折号之前的字符组总是包含相同数量的项目(例如2个字符),这将是一个微不足道的任务。 你可以使用MID函数从一个字符串中返回3个字符,从位置4开始(跳过前2个字符和一个破折号)。
=MID(A2, 4, 3)
翻译成英文,该公式说:"在A2单元格中寻找,从字符4开始提取,并返回3个字符"。
然而,在现实生活中的工作表中,你需要提取的子串可能从文本字符串的任何地方开始。 在我们的例子中,你可能不知道在第一个破折号之前有多少个字符。 为了应对这一挑战,使用FIND函数来确定你要检索的子串的起点。
返回第1个破折号位置的FIND公式如下。
=FIND("-",A2)
因为你想从破折号后面的字符开始,在返回值上加1,并将上述函数嵌入MID函数的第二个参数(start_num)中。
=mid(a2, find("-",a2)+1, 3)
在这种情况下,Excel的搜索功能也同样适用。
=mid(a2, search("-",a2)+1, 3)
这很好,但如果第一个破折号后面的一组字符包含不同数量的字符怎么办? 嗯...这可能是一个问题。
正如你在上面的截图中看到的,该公式对第1行和第2行完全有效。 在第4行和第5行中,第二组包含4个字符,但只返回前3个字符。 在第6行和第7行中,第二组只有2个字符,因此我们的Excel搜索公式在它们后面返回一个破折号。
如果你想返回 第1次和第2次出现的所有字符 以下是答案。
=mid(a2, find("-",a2)+1, find("-", a2, find("-",a2)+1) - find("-",a2)-1)
为了更好地理解这个MID公式,让我们逐一研究它的论据。
- 第1个参数(text):它是包含你想提取的字符的文本字符串,在本例中是A2单元格。
- 第2个参数(start_position).指定你要提取的第一个字符的位置。 你用FIND函数定位字符串中的第一个破折号,并在该值上加1,因为你想从破折号后面的字符开始:FIND("-",A2)+1。
- 第3个参数(num_chars):指定你想返回的字符数。 在我们的公式中,这是最棘手的部分。 你使用两个FIND(或SEARCH)函数,一个确定第一个破折号的位置:FIND("-",A2)。 另一个返回第二个破折号的位置:FIND("-", A2, FIND("-",A2)+1)。 然后你用后者减去前者,再减1,因为你不希望结果,你会得到第一和第二条破折号之间的字符数,这正是我们要找的。 因此,你把这个值输入MID函数的num_chars参数。
以类似的方式,你可以在第二个破折号后返回3个字符。
=mid(a2, find("-",a2, find("-", a2, find("-",a2)+1) +2), 3)
或者,提取第二和第三条破折号之间的所有字符。
=mid(a2, find("-", a2, find("-",a2)+1)+1, find("-",a2, find("-",a2)+1) +2) - find("-",a2, find("-",a2)+1) -1)
例4.查找小括号之间的文本
假设你在A列有一些长的文本字符串,你想找到并只提取(括号)内的文本。
要做到这一点,你需要用MID函数从一个字符串中返回所需的字符数,用Excel的FIND或SEARCH函数来决定从哪里开始,提取多少个字符。
=mid(a2,search("(",a2)+1, search(")",a2)-search("(", a2)-1)
这个公式的逻辑与我们在上一个例子中讨论的类似。 同样,最复杂的部分是最后一个参数,它告诉公式要返回多少个字符。 num_chars参数中的那个相当长的表达式做了以下工作。
- 首先,你要找到结尾括号的位置。
SEARCH(")",A2)
- 之后,你要找到开头括号的位置。
SEARCH("(",A2)
- 然后,你计算闭合括号和开放括号的位置之差,并从这个数字中减去1,因为你不希望结果中出现任何一个括号。
search(")",a2)-search("(",a2))-1
当然,没有什么能阻止你使用Excel的FIND函数而不是SEARCH,因为在这个例子中,大小写敏感或不敏感没有什么区别。
希望本教程对如何在Excel中使用SEARCH和FIND函数有所启发。 在下一个教程中,我们将仔细研究REPLACE函数,请继续关注。 谢谢您的阅读!
下载实践工作手册
查找和搜索公式示例