编辑:

编辑:

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 将范围视为一个数组,并通过一步完成辅助列所执行的操作。

相关内容