将行号拉入查询谷歌电子表格

时间:2013-07-13 02:55:49

标签: google-sheets

我有一个如下所示的数据集:从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()

3 个答案:

答案 0 :(得分:1)

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

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

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

在您的示例中,返回3

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

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

答案 1 :(得分:1)

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

=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的东西时,过滤器将为true,因为电子表格看到一个大于零的值作为布尔值true,因此,对于那个如果存在countif匹配的行,则会有一个过滤器匹配,因此它将显示该行(实际上,当c或d匹配时,regexmatch创建一个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.*)' "))

答案 2 :(得分:-1)

=QUERY({A1:A,ARRAYFORMULA(ROW(A1:A))},"SELECT Col2 WHERE Col1 LIKE '%c%'")