LO Calc 中是否有一个函数可以找到细胞使用给定的文本?
搜索和查找功能似乎给出了字符串中的位置。也就是说,如果我在两个单元格中搜索文本“a”,其中一个单元格包含“xxxa”,另一个单元格包含“bbb”,则答案为 4。
这不是我需要的。我需要找到哪个单元格包含有问题的文本。
答案1
只需使用MATCH()
功能。因为它支持常用表达,您可以使用 MATCH() 来搜索部分字符串。
以下是一个例子:
查找数组为A1:A4
,搜索条件为.*a.*
(这是一个正则表达式,语法见上面的链接)。公式的结果=MATCH(".*a.*";A1:A4;0)
是2
,因为第二查找数组中的单元格是与搜索模式匹配的第一个单元格。
编辑:
关于正则表达式:以下是正则表达式字符的列表. 表达式.*a.*
由以下部分组成:
- 文字
a
,匹配单个a
字符; - 点
.
,匹配任意字符; - 星号
*
,一个量词,表示前一个字符的“零个或多个”。
因此,正则表达式模式匹配每个包含 的单元格内容a
,该内容的前面和后面有任意数量的其他字符。要熟悉正则表达式,请查看正则表达式或者在线正则表达式测试器。
答案2
读者须知:LibreOffice 在第 5 版左右添加了通配符和正则表达式,通常与其他电子表格应用程序(如 Excel)兼容。在提出这个问题时,我正在使用 Debian 存储库中 LO 的最新版本,该版本早于此。如果您现在正在阅读本文,则接受的答案就是最佳解决方案。我只能想到一种您可能想要使用此答案作为替代方案的情况:如果您被困在旧版本的 LO Calc 中(这有时会发生在使用自定义软件包的一些轻量级发行版中)。为了以防万一,我会保留这个答案。
这是一个使用辅助列的解决方法(如果您的 LO Calc 版本支持 SUMPRODUCT,则可以在没有辅助列的情况下使用,我将在最后展示)。
您可以隐藏 B 列。单元格 B1 包含:
=ISNUMBER(SEARCH("a",A1))*ROW()
根据需要将其复制到列下。如果单元格包含“a”,则提供行号,否则为零。您想要的单元格地址在 D1 中:
=ADDRESS(SUM(B1:B3),1)
匹配行和一堆零的总和就是行,列是已知的。您可以在公式中直接使用这些值,而不必创建地址的文本表示。
您可以使用 SUMPRODUCT 消除辅助列,在这种情况下 D1 中的公式将是:
=ADDRESS(SUMPRODUCT(ISNUMBER(SEARCH("a",A1:A3))*ROW(A1:A3)),1)
SUMPRODUCT 将范围视为一个数组,并通过一步完成辅助列所执行的操作。