如何用公式将Google Spreadsheet多工作表首列动态合并至新列?
自动合并所有工作表首列数据的Google Sheets公式方案
这个需求我之前帮朋友处理过,用Google Sheets的新一代动态函数就能完美实现自动更新——不管是增删工作表、还是修改某张表首列的数据,汇总列都会自动同步,完全不用手动调整公式!
核心公式(直接复制使用)
把这个公式放到你想要存放汇总数据的单元格(比如新建的"汇总"工作表A1单元格):
=TOCOL(MAP(FILTER(GET_WORKBOOK(1), GET_WORKBOOK(1)<>CELL("sheet")), LAMBDA(sheet, INDIRECT("'"&sheet&"'!A:A"))), 1)
公式各部分拆解(帮你理解原理)
GET_WORKBOOK(1):获取当前工作簿里所有工作表的名称,返回一个数组(比如["Sheet1", "Sheet2", "汇总"])FILTER(..., GET_WORKBOOK(1)<>CELL("sheet")):过滤掉当前存放公式的工作表(比如"汇总"),避免出现循环引用的问题MAP(..., LAMBDA(sheet, INDIRECT("'"&sheet&"'!A:A"))):遍历每个工作表名称,用INDIRECT函数引用对应工作表的首列(A列)数据,最终得到一个包含所有工作表A列数据的二维数组TOCOL(..., 1):把二维数组扁平化成为一列,参数1表示自动忽略空单元格,让汇总列只显示有内容的数据
自定义调整技巧
- 跳过表头:如果每张表的第一行是表头,不需要合并到汇总里,把公式里的
A:A改成A2:A即可:=TOCOL(MAP(FILTER(GET_WORKBOOK(1), GET_WORKBOOK(1)<>CELL("sheet")), LAMBDA(sheet, INDIRECT("'"&sheet&"'!A2:A"))), 1) - 保留空单元格:如果需要保留空值,把
TOCOL的第二个参数去掉或者改成0:=TOCOL(MAP(FILTER(GET_WORKBOOK(1), GET_WORKBOOK(1)<>CELL("sheet")), LAMBDA(sheet, INDIRECT("'"&sheet&"'!A:A"))))
注意事项
- 确保你的Google Sheets是新版(支持
GET_WORKBOOK、MAP、TOCOL这些函数,目前大部分账号都已经支持) - 如果工作表名称包含空格、特殊字符,公式里的
'"&sheet&"'已经处理了这种情况,不用额外修改 - 当你新增/删除工作表、修改任意工作表A列的数据时,汇总列会自动刷新,完全不用手动操作
内容的提问来源于stack exchange,提问作者stochastic
相关产品推荐
相关产品推荐

