如何在Google Sheets中按工作表名列表循环堆叠n*2数组?
动态堆叠多工作表n*2数组的解决方案
需求说明
实现一个可循环处理的公式,输入为工作表名列表(如A1:A3),遍历每个工作表读取指定范围(示例中为第3行),输出形如{工作表名, 值1; 工作表名, 值2...}的n*2数组。此前尝试用LET()嵌套MAP()/BYROW()时,因父函数不支持内部可变尺寸输出导致失败。
输入示例(A1:A3)
| A | |
|---|---|
| 1 | Sheet1 |
| 2 | Sheet2 |
| 3 | Sheet3 |
动态公式解决方案
=VSTACK( {"Data sheet", "Data reference"}, REDUCE("", A1:A3, LAMBDA(acc, sheet, VSTACK(acc, HSTACK(REPT(sheet, COUNTA(INDIRECT("'"&sheet&"'!3:3"))), INDIRECT("'"&sheet&"'!3:3"))) )) )
公式说明
REDUCE作为累加容器,初始值为空,遍历输入的工作表名列表- 对每个工作表:
COUNTA(INDIRECT("'"&sheet&"'!3:3"))统计目标行的非空单元格数量REPT(sheet, 统计数)生成与数据行数匹配的工作表名字段HSTACK将工作表名字段与该行数据合并为n*2数组
- 每次迭代用
VSTACK将当前结果累加到总结果中 - 最外层
VSTACK添加表头行
输出示例
| Data sheet | Data reference |
|---|---|
| Sheet1 | s1_value1 |
| Sheet1 | s1_value2 |
| Sheet2 | s2_value1 |
| Sheet2 | s2_value2 |
| Sheet2 | s2_value3 |
| Sheet3 | s3_value1 |
内容的提问来源于stack exchange,提问作者jesh
相关产品推荐
相关产品推荐

