QUERY() 获取特定单元格下方的行

QUERY() to get rows below a certain cell

我正在从外部 API 下载 CSV 文件。它 returns 具有以下结构的 table:

foo
bar    1    4
baz    2    3

有什么方法可以使 QUERY(或其他函数?)获得 foo 单元格下方的前两行吗?

barbaz 行还有其他几处出现,这就是为什么我只想要 foo 单元格下方的行。可行吗?

尝试:

=query(A2:C,"select * where A='bar' or A='baz' limit 2")

试试这个公式:

=QUERY(FILTER(A1:C13,row(A1:C13)>MATCH("foo",A1:A13,0)),"select * limit 2")

example workbook

要使用导入的数据而不是范围,请使用:

=QUERY(FILTER(Data,row(Data)>MATCH("foo",query(Data,"select Col1"),0)),"select * limit 2")

这里还有一个替代方案:使用 regexextract 和 concatenate,使用附加的 rept 函数来获取每个值,假装 url 在 A1 中:

=regexextract(concatenate(IMPORTDATA(A1)),"(Basic)"&rept("(\d\.\d{1,3})",6))

=regexextract(concatenate(IMPORTDATA(A1)),"(Diluted)"&rept("(\d\.\d{1,3})",6))

结果是这样的:

如果你想加倍确定:在基本前面加上每股收益:

=regexextract(concatenate(IMPORTDATA(A1)),"Earnings per share(Basic)"&rept("(\d\.\d{1,3})",6))

=regexextract(concatenate(IMPORTDATA(A1)),"Earnings per shareBasic.*(Diluted)"&rept("(\d\.\d{1,3})",6))

要让输出全部在一行中,一个接一个:

=regexextract(concatenate(IMPORTDATA(A1)),"Earnings per share(Basic)"&rept("(\d\.\d{1,3})",6)&"(Diluted)"&rept("(\d\.\d{1,3})",6))

基本上,如果您想查看原始数据,请删除正则表达式部分,只保留连接和导入数据 - 正则表达式部分有助于忽略开头部分,然后使用括号指定要捕获的部分。这些称为捕获组。从技术上讲,它们之外的任何内容都会被忽略。