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