如何用INDIRECT动态引用工作表,结合ARRAYFORMULA与XMATCH实现动态匹配
动态匹配不同工作表表头位置的解决方案
问题核心
你之前用ARRAYFORMULA(XMATCH(A3:A;INDIRECT(B3:B&"!$1:$1")))失效的原因是:INDIRECT(B3:B&"!$1:$1")会返回多个独立的表头区域,但ARRAYFORMULA无法让XMATCH实现逐行一一对应(即A3对应B3的表、A4对应B4的表),只会对第一个区域生效。
可行公式(适配动态行)
直接在C3单元格输入以下公式,自动适配A、B列的动态长度:
=MAP(A3:A, B3:B, LAMBDA(val, sheet, IF(OR(val="", sheet=""),, XMATCH(val, INDIRECT(sheet&"!$1:$1")))))
公式说明
MAP(A3:A, B3:B, ...):自动遍历A列的查找值和B列的工作表名称,无需预先固定行数LAMBDA(val, sheet, ...):定义每一行的计算逻辑,val是当前行A列的值,sheet是当前行B列的工作表名IF(OR(val="", sheet=""),, ...):跳过空行,避免出现错误值XMATCH(val, INDIRECT(sheet&"!$1:$1")):针对当前指定工作表的第一行,精准查找值的位置
兼容旧版Google Sheets(无MAP函数)
如果你的表格不支持MAP函数,改用BYROW实现:
=BYROW(A3:B, LAMBDA(row, LET(val, INDEX(row,1), sheet, INDEX(row,2), IF(OR(val="", sheet=""),, XMATCH(val, INDIRECT(sheet&"!$1:$1"))))))
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

