FIND、FINDB 函数
本文介绍 Microsoft Excel 中 FIND 和 FINDB 函数的公式语法和用法。
说明
函数 FIND 和 FINDB 用于在第二个文本串中定位第一个文本串,并返回第一个文本串的起始位置的值,该值从第二个文本串的第一个字符算起。
要点 FIND 适用于使用单字节字符集 (SBCS) 的语言,而 FINDB 适用于使用双字节字符集 (DBCS) 的语言。 您的计算机上的默认语言设置对返回值的影响方式如下:
· 无论默认语言设置如何,函数 FIND 始终将每个字符(不管是单字节还是双字节)按 1 计数。
· 当启用支持 DBCS 的语言的编辑并将其设置为默认语言时,FINDB 会将每个双字节字符按 2 计数。 否则,FINDB 会将每个字符按 1 计数。
支持 DBCS 的语言包括日语、中文(简体)、中文(繁体)以及朝鲜语。
语法
FIND(find_text, within_text, [start_num])
FINDB(find_text, within_text, [start_num])
FIND 和 FINDB 函数语法具有下列参数:
· find_text 必需。 要查找的文本。
· within_text 必需。 包含要查找文本的文本。
· start_num 可选。 指定开始进行查找的字符。 within_text 中的首字符是编号为 1 的字符。 如果省略 start_num,则假定其值为 1。
说明
· FIND 和 FINDB 区分大小写,并且不允许使用通配符。 如果您不希望执行区分大小写的搜索或使用通配符,则可以使用 SEARCH 和 SEARCHB 函数。
· 如果 find_text 为空文本 (""),则 FIND 会匹配搜索字符串中的首字符(即编号为 start_num 或 1 的字符)。
· Find_text 不能包含任何通配符。
· 如果 within_text 中没有 find_text,则 FIND 和 FINDB 返回 错误值 #VALUE!。
· 如果 start_num 不大于 0,则 FIND 和 FINDB 返回 错误值 #VALUE!。
· 如果 start_num 大于 within_text 的长度,则 FIND 和 FINDB 返回 错误值 #VALUE!。
· 可以使用 start_num 来跳过指定数目的字符。 以 FIND 为例,假设要处理文本字符串“AYF0093.YoungMensApparel”。 若要在文本字符串的说明部分中查找第一个“Y”的编号,请将 start_num 设置为 8,这样就不会搜索文本的序列号部分。 FIND 从第 8 个字符开始查找,在下一个字符处找到 find_text,然后返回其编号 9。 FIND 始终返回从 within_text 的起始位置计算的字符编号,如果 start_num 大于 1,则会对跳过的字符计数。
示例
复制下表中的示例数据,然后将其粘贴进新的 Excel 工作表的 A1 单元格中。 要使公式显示结果,请选中它们,按 F2,然后按 Enter。 如果需要,可调整列宽以查看所有数据。
数据 |
||
Miriam McGovern |
||
公式 |
说明 |
结果 |
=FIND("M",A2) |
单元格 A2 中第一个“M”的位置 |
1 |
=FIND("m",A2) |
单元格 A2 中第一个“M”的位置 |
6 |
=FIND("M",A2,3) |
从单元格 A2 的第三个字符开始查找第一个“M”的位置 |
8 |
示例 2
数据 |
||
Ceramic Insulators #124-TD45-87 |
||
Copper Coils #12-671-6772 |
||
Variable Resistors #116010 |
||
公式 |
说明(结果) |
结果 |
=MID(A2,1,FIND(" #",A2,1)-1) |
提取单元格 A2 中从第一个字符到“#”的文本 (Ceramic Insulators) |
Ceramic Insulators |
=MID(A3,1,FIND(" #",A3,1)-1) |
提取单元格 A3 中从第一个字符到“#”的文本 (Copper Coils) |
Copper Coils |
=MID(A4,1,FIND(" #",A4,1)-1) |
提取单元格 A4 中从第一个字符到“#”的文本 (Variable Resistors) |
Variable Resistors |
返回最先找到特定字符或文本字符串的位置的字符编号(从左向右算起)。搜索不区分大小写,但区分重音。
本文介绍数据分析表达式 (DAX) 中的一个函数,DAX 是一种在 Excel 中定义PowerPivot 计算的公式表达式语言。很多DAX 函数具有与Excel 函数相同的名称和相似的行为,但是DAX 函数只能在DAX 公式中使用。
本文内容
·
· 语法
· 参数
· 返回值
· 备注
· 示例:在字符串内搜索
· 示例:在列内搜索
· 示例:针对 SEARCH 的错误处理
返回页首
SEARCH(<find_text>, <within_text>[, [<start_num>][, <NotFoundValue>]])
返回页首
项 |
定义 |
find_text |
要查找的文本。 可以在 find_text 中使用通配符,即可以使用问号 (?) 和星号 (*)。问号匹配任何单个字符;星号匹配任何字符序列。如果您想要查找实际的问号或星号,则在字符前键入代字号 (~)。 |
within_text |
要在其中搜索 find_text 的文本或包含文本的列。 |
start_num |
(可选)要在 within_text 中开始搜索的字符位置。如果省略,则为 1。 |
返回页首
第一个文本字符串在第二个文本字符串中从第一个字符算起的起始位置编号。
返回页首
1. 搜索函数不区分大小写。搜索“N”将找到“N”或“n”的第一个匹配项。
2. 搜索函数区分重音。搜索“á”将找到“á”的第一个匹配项,但不会找到“a”、“à”的匹配项或者大写版本“A”、“Á”。
3. 通过使用此函数,您可以在第二个文本字符串中找到一个文本字符串,并且返回第一个字符串的起始位置。
4. 您可以使用 SEARCH 函数确定一个字符或文本字符串在另一个文本字符串内的位置,然后使用 MID 函数返回文本,或者使用 REPLACE 函数更改文本。
5. 如果在 within_text 中找不到 find_text,则该公式将返回错误。此行为与 Excel 类似,后者在找不到子字符串的情况下将返回 #VALUE。within_text 中的 Null 将在此上下文中解释为空字符串。
在用于在DirectQuery 模式下部署然后查询的模型中时,此DAX 函数可返回不同的结果。有关DirectQuery 模式中的语义差异的详细信息,请参阅[[REMOVED FWLINK 219171 TO MSDN]]。
返回页首
下面的公式查找字母“n”在单词“printer”中的位置。
=SEARCH("n","printer")
该公式将返回4,因为“n”是单词“printer”中的第四个字符。
返回页首
您可以使用列引用作为SEARCH 的参数。下面的公式查找字符“-”(连字符)在列[PostalCode] 中的位置。
=SEARCH("-",[PostalCode])
返回结果是一个数字列,指示连字符的索引位置。
返回页首
如果在源列的每一行中都找不到搜索字符串,则前面示例中的公式将失败。因此,下一个示例将说明如何将IFERROR 与SEARCH 函数一起使用,以便确保为每一行都返回有效结果。
下面的公式查找字符“-”在列中的位置,并且找不到该字符串则返回-1。
= IFERROR(SEARCH("-",[PostalCode]),-1)
请注意,您用作错误输出的值的数据类型必须匹配非错误输出类型的数据类型。在此情况下,您提供在出现错误时要输出的数值,因为SEARCH 将返回整数值。
但是,您还可以通过使用BLANK() 作为IFERROR 的第二个参数,返回空白(空字符串)。