【问题标题】:pulling row number into query google spreadsheet将行号拉入查询谷歌电子表格
【发布时间】:2013-07-13 02:55:49
【问题描述】:

我有一个如下所示的数据集:从 A1 以“1”开始

1 a
2 b
3 c
4 d

A 列是一个数组公式 =arrayformula(row(b1:b)) B栏为手动输入

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

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

这应该给我“3”

我的问题:

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

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

请不要使用脚本代码。

我尝试了一些方法,但没有成功。

寻找以

开头的解决方案
=query()

【问题讨论】:

    标签: google-sheets


    【解决方案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,因此,存在 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.*)' "))
    

    【讨论】:

    • 可以在过滤器中使用通配符吗?就像在查询中一样?
    • 您可以将正则表达式添加到第二个参数作为一种选择。我已经修改了答案以显示这一点。
    • 我已经编辑了带有行运算符和通配符的查询功能
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 我已经改变了问题,我意识到我把问题弄得太简单了。 match 不起作用,因为我正在寻找使用通配符的查询函数。我需要一些不完全匹配的东西
    【解决方案3】:
    =QUERY({A1:A,ARRAYFORMULA(ROW(A1:A))},"SELECT Col2 WHERE Col1 LIKE '%c%'")
    

    【讨论】:

    • 请解释您的解决方案
    • 根据 DebanjanB 和 BookOfZeus 的建议,应提供额外信息。
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2021-07-09
    相关资源
    最近更新 更多