You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel工作簿wkb1中动态引用多份同类wkb2工作簿数据?

这个需求我之前帮同事处理过,核心就是把原本固定的工作簿引用改成可动态切换的变量,下面给你两个实用方案,你可以根据自己的Excel版本和操作习惯来选:

方案一:用定义名称+单元格指定工作簿名(适合不想大幅修改现有公式的场景)

这个方法可以最小程度改动你现有的OFFSET/MATCH公式,步骤如下:

  • 先在wkb1的空白单元格(比如Sheet1!B1)设置为「工作簿名称输入框」,用来输入你要引用的目标工作簿全名(比如wkb2_张三.xlsx,必须带后缀)。如果目标工作簿不在同一个文件夹,要输入完整路径,比如C:\Users\XXX\Documents\wkb2_张三.xlsx。
  • 按Ctrl+F3打开「名称管理器」,新建一个名称(比如TargetNameList),引用位置填写:
    =INDIRECT("'"&Sheet1!$B$1&"'!Sheet1!$A:$A")
    
    这里要对应你实际的工作表和列——比如如果目标工作簿的姓名在Sheet2的C列,就改成=INDIRECT("'"&Sheet1!$B$1&"'!Sheet2!$C:$C")。
  • 修改数据验证列表:把原来基于wkb2的数据源,替换成刚才定义的TargetNameList,这样只要在B1输入不同的工作簿名,下拉列表就会自动切换对应数据源。
  • 修改OFFSET/MATCH公式:把原公式里固定的[wkb2]部分,替换成动态引用。比如原公式是:
    =OFFSET([wkb2]Sheet1!A3,MATCH(Sheet1!A2,[wkb2]Sheet1!A:A,0)-1,1)
    
    改成:
    =OFFSET(INDIRECT("'"&Sheet1!$B$1&"'!Sheet1!A3"),MATCH(Sheet1!A2,TargetNameList,0)-1,1)
    
    (用TargetNameList代替重复的INDIRECT,让公式更简洁)

    注意:如果目标工作簿未打开,INDIRECT函数会返回#REF!,所以这个方案适合需要实时打开目标工作簿的场景。

方案二:用Power Query实现批量动态加载(适合多工作簿批量处理,支持离线引用)

这个方法更适合你有大量同类工作簿的场景,不需要逐个打开,还能一键刷新数据:

  • 在wkb1中点击「数据」选项卡→「获取数据」→「来自文件」→「来自文件夹」,选择存放所有wkb2类工作簿的文件夹。
  • 在弹出的Power Query编辑器中,点击「合并文件」按钮,选择任意一个wkb2类工作簿作为示例,然后选择要加载的工作表(比如Sheet1),确认后Power Query会自动识别所有同结构的工作簿。
  • 编辑查询:可以添加「工作簿名称」列(方便后续筛选),然后关闭并上载到wkb1的新工作表(比如命名为「数据源」)。
  • 设置工作簿切换控件:在wkb1的操作工作表(比如Sheet1)中,添加一个下拉列表(数据验证),数据源选择「数据源」工作表中的「工作簿名称」列,用来选择要引用的目标工作簿。
  • 替换数据获取公式:用XLOOKUP或INDEX/MATCH结合FILTER来提取对应数据。比如要获取姓名对应的年龄,公式可以写:
    =XLOOKUP(Sheet1!A2,FILTER(数据源!A:A,数据源!工作簿名称=Sheet1!B1),FILTER(数据源!B:B,数据源!工作簿名称=Sheet1!B1))
    
    这个方案的优势是:不需要打开目标工作簿,新加入文件夹的工作簿只要点击「数据」→「全部刷新」就能同步,批量处理效率极高。

补充注意事项

  • 如果你用的是Excel 2016及更早版本,Power Query叫做「获取和转换」,操作逻辑完全一致。
  • 方案一中,如果要支持离线引用,可以考虑用CELL("filename")配合其他函数,但复杂度会高一些,不如方案二稳定。

内容的提问来源于stack exchange,提问作者Olórin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:30:19