如何结合Array、IF与Indirect函数批量导入指定工作表数据?
批量合并标记为"yes"的工作表数据到Sheet2
核心数组公式(Google Sheets适用)
在Sheet2的A2单元格输入以下公式,自动生成合并后的长列表:
=FLATTEN(BYROW(FILTER(Sheet1!A:A,Sheet1!B:B="yes"),LAMBDA(sheet,INDIRECT(sheet&"!A2:A"))))
公式拆解
FILTER(Sheet1!A:A,Sheet1!B:B="yes"):从Sheet1中筛选出所有标记为"yes"的目标工作表名称BYROW(..., LAMBDA(sheet,INDIRECT(sheet&"!A2:A"))):遍历每个筛选出的工作表名称,通过INDIRECT引用对应工作表的A2:A数据区域FLATTEN:将多个工作表的二维数据数组扁平化,合并为一个连续的一维列表
优化方案(自动忽略空行)
如果目标工作表A列存在空行,可使用以下公式自动过滤空值:
=FILTER( FLATTEN(BYROW(FILTER(Sheet1!A:A,Sheet1!B:B="yes"),LAMBDA(sheet,INDIRECT(sheet&"!A2:A")))), FLATTEN(BYROW(FILTER(Sheet1!A:A,Sheet1!B:B="yes"),LAMBDA(sheet,INDIRECT(sheet&"!A2:A"))))<>"" )
注意事项
- 确保Sheet1中A列的工作表名称与实际工作表名称完全一致,否则
INDIRECT会返回#REF!错误 - 公式为动态数组类型,当Sheet1的标记状态或目标工作表的数据更新时,合并列表会自动同步更新
内容的提问来源于stack exchange,提问作者Timothy Sayer
相关产品推荐
相关产品推荐

