LibreOffice Calc 搜索和查找函数

LibreOffice Calc 搜索和查找函数

我正在尝试在 Calc 中处理一些数据。其中一个步骤涉及查找某个字符串是否属于某一列。我尝试使用 FIND 和 SEARCH 函数。两者的行为方式相同,但我没有得到正确的结果。

例如说我在 A 列中有以下字符串

NY
SF
LON
CAN
US

并尝试将以下公式放在 C 列中

=SEARCH("NY",A2)

结果是 - 单元格 C2 将有 1(这是正确的)但如果将相同的公式复制到 C 列中的其他单元格 - 它会给出“#VALUE!”错误,我无法找出原因?

有人有什么想法吗?

答案1

#VALUE!如果搜索失败,则结果为默认结果(参见OpenOffice.org Calc 关于 SEARCH 函数的文档)。由于所有其他字符串均不包含“NY”,因此这是这些单元格的正确结果。

我猜你把结果“1”误认为是“布尔”结果,而搜索失败的结果应该是“0”。但事实并非如此。上述文件有一些涉及的例子系统号码错误评估 SEARCH 函数的结果。

答案2

首先,如果您想在多行/列中搜索文本,您需要给出一个单元格范围,而不仅仅是一个单元格:A2:A6,或者更好的是$A$2:$A$6

其次,当您将一个单元格公式复制粘贴或翻译到另一个单元格时,$ 将被视为常量坐标。假设您将公式放在 C2 中。复制到 C3 后将得到=SEARCH("NY",A3)。如果您将其复制到 D2,则值将为=SEARCH("NY",B2)

从我在 Libre Office 帮助中读到的内容来看,FIND 和 SEARCH 函数会在另一个文本中搜索一个文本,我猜它与您给出的范围第一行中的值相匹配。因此这些函数并没有达到您的预期。

我做了一些研究(尝试了不同的东西),似乎最好的选择是使用MATCH函数来检查某个值是否存在于某个单元格范围内,并OFFSET打印该值而不是该范围内的索引。

=OFFSET($A$2; MATCH("SF";$A$2:$A$6; 0) - 1; 0)

答案3

正如@tohuwawohu 提到的,使用 ISERROR (ISERR) 函数。使用 SEARCH 时,如果在文本中找不到该值,则返回 #VALUE!。为了在您的逻辑中适应这种情况,请使用以下模式:

=IF(ISERR(SEARCH(<str_to_find>, <str_to_search_in>)), <NOT_FOUND_do_something>, <IS_FOUND_do_something_else>)

这种使用 ISERR 的模式可以应用于函数返回错误的许多其他情况。唯一的例外是 #N/A,此时必须使用 ISNA 函数。

答案4

虽然其他答案解释了为什么ISNUMBER会出现这种情况,但似乎没有人给出现实世界的实际例子。

您可以使用ISNUMBERVALUE携手投掷在使用 进行测试之前,将结果转换为数字ISNUMBER

例如,假设我们有一个像MDRLN4885BA1 中的字符串,我们想知道最后一个字符是否是非数字,在本例中它是“B”。

=ISNUMBER(VALUE(RIGHT(A2, 1)))

这基本上会给你FALSE(或者TRUE如果它是一个数字),然后你可以使用它来评估IF,例如。

相关内容