Google Sheets如何跨多工作表整合数据并按percent列排序
解决方案
可以使用QUERY结合数组合并的方式实现需求,直接在Ranks工作表的A1单元格输入以下公式:
={ {"person", "value", "percent", "source"}; QUERY({ foo!A2:C, ARRAYFORMULA(REPT("foo", ROWS(foo!A2:A))); bar!A2:C, ARRAYFORMULA(REPT("bar", ROWS(bar!A2:A))); baz!A2:C, ARRAYFORMULA(REPT("baz", ROWS(baz!A2:A))) }, "SELECT Col1, Col2, Col3, Col4 WHERE Col1 IS NOT NULL ORDER BY Col3 DESC", 0) }
公式说明:
- 数据合并:通过大括号
{}将三个工作表的数据拼接在一起,每个数据集在原person/value/percent列基础上,用ARRAYFORMULA(REPT("工作表名", 行数))生成对应行数的来源标识列,确保每一行数据都能关联到原工作表。 - 筛选与排序:
QUERY函数负责过滤空行(WHERE Col1 IS NOT NULL,排除无数据的空白行),并按percent列(对应Col3)降序排序;如果需要升序排序,去掉DESC即可。 - 自动生成表头:公式开头的
{"person", "value", "percent", "source"}直接生成整合后的表头,无需手动添加。
替代简化写法(适合数据量不大的场景):
如果原工作表没有大量空白行,也可以用TOCOL+SORT的组合,写法更简洁:
=SORT( { foo!A2:C, TOCOL(REPT("foo", ROWS(foo!A2:A)),1); bar!A2:C, TOCOL(REPT("bar", ROWS(bar!A2:A)),1); baz!A2:C, TOCOL(REPT("baz", ROWS(baz!A2:A)),1) }, 3, FALSE )
这里TOCOL(...,1)自动忽略空值,SORT的第三个参数FALSE表示降序排序,改为TRUE即为升序。
内容的提问来源于stack exchange,提问作者bismo
相关产品推荐
相关产品推荐

