0

我有一个看起来像这样的数据集:从 A1 开始,“1”

1 a
2 b
3 c
4 d

A列是arrayformula =arrayformula(row(b1:b)) B列是手动输入

我想查询数据库并通过匹配列 B 查找项目的行,所以我有这样的代码

=query("A1:B","select A where B like '%c%')

这应该给我“3”

我的问题:

有没有办法将 1-4 个数字拉到查询行中?使用数组公式行(b1:b)之类的东西。我不想在 A 列上浪费额外的列

所以基本上我只想要手动输入,当我查询时它会给我行号。

请不要脚本代码。

我已经尝试了几件事,但没有奏效。

寻找解决方案

=query()
4

3 回答 3

3

如果这对您很重要,您还可以使用公式在数据集中提取与条件匹配的多行:

=arrayformula(filter(row(B:B); B:B="c"))

并且您可以使用通配符类型的运算符,在某些情况下(您将匹配文本或看起来像文本的项目(因此数字可以被视为文本 - 但布尔值需要更多步骤);数据集不是很大),使用正则表达式。例如

=arrayformula(filter(row(B:B); regexmatch(B:B, "(c|d)")))

您还可以使用标准电子表格通配符运算符,例如

=arrayformula(filter(row(B:B); countif(B:B, "*c*")))

说明:在这种情况下,过滤器将在 countif 大于零时为真,即当它看到带有字母 c 的东西时,因为电子表格将大于零的值视为布尔值,因此对于存在的那一行是 countif 匹配,将有一个过滤器匹配,因此它将显示该行(实际上,在上述情况下,当匹配 c 或 d 时,正则表达式匹配创建 true 的情况类似)。

就个人而言,我想学习一点正则表达式,所以我会选择 regexmatch 选项。但这是你的选择。

当然,您也可以在单元格之外创建匹配项。这样可以轻松创建要在工作表上其他地方满足的匹配列表。所以你可以有一列单词或部分单词,从 Z2 向下,然后在单元格 Z1 中将它们连接在一起,例如像这样

="("&join("|",filter(Z2:Z50,len(Z2:Z50)))&")"

然后您的过滤器功能将如下所示:

=arrayformula(filter(row(B:B), regexmatch(B:B, Z1)))

如果你想在查询函数中使用 like 运算符,你可以尝试这样的操作:

=arrayformula(query(if({1,0}, B:B,row(B:B)),"select Col2 where Col1 like '%c%' "))

您还可以在查询函数中使用正则表达式,例如:

=arrayformula(query(if({1,0}, B:B,row(B:B)),"select Col2 where Col1 matches '(.*c.*|.*d.*)' "))
于 2013-07-13T08:37:18.903 回答
1

我对这个问题并不完全清楚,但据我了解,您希望能够输入一个公式,并让它返回一个范围内匹配项的行号?我不确定数组公式的来源。

如果我正确理解了您的问题,这应该可以解决问题:

=MATCH("C",B1:B,0)

在您的示例中,这将返回3.

如果我误解了你的问题,请原谅我。

注意:如果有多个匹配项,这将返回第一个搜索实例的行号。

于 2013-07-13T06:35:41.970 回答
-1
=QUERY({A1:A,ARRAYFORMULA(ROW(A1:A))},"SELECT Col2 WHERE Col1 LIKE '%c%'")
于 2019-02-18T00:15:36.353 回答