Excel非VBA实现:基于下拉值汇总多工作表表格遇公式报错求助
解决方法
方法1:使用VSTACK+FILTER(Excel 365/2021及以上版本)
直接用VSTACK合并多工作表数据,再结合FILTER根据C16的状态值筛选,公式简洁高效:
=LET( 合并数据, VSTACK( FILTER('Worksheet 1'!B:D, 'Worksheet 1'!B:B<>""), FILTER('Worksheet 2'!B:D, 'Worksheet 2'!B:B<>""), FILTER('Worksheet 3'!B:D, 'Worksheet 3'!B:B<>"") ), FILTER(合并数据, INDEX(合并数据,,3)=C16, "无匹配数据") )
- 若状态列不是B:D中的第3列(比如是C列),把
INDEX(合并数据,,3)里的3改成对应列序号(C列写2,B列写1) "无匹配数据"为无符合条件时的提示文本,可按需修改
方法2:兼容旧版本的LET+嵌套IF写法
如果Excel版本不支持VSTACK,需修正之前的逻辑错误(直接连续写INDEX会导致行号引用越界),用嵌套IF明确行号范围:
=LET( data1, FILTER('Worksheet 1'!B:D, 'Worksheet 1'!B:B<>""), data2, FILTER('Worksheet 2'!B:D, 'Worksheet 2'!B:B<>""), data3, FILTER('Worksheet 3'!B:D, 'Worksheet 3'!B:B<>""), rows1, ROWS(data1), rows2, ROWS(data2), rows3, ROWS(data3), cols, COLUMNS(data1), rowindex, SEQUENCE(rows1+rows2+rows3), colindex, SEQUENCE(1, cols), 合并数据, IF( rowindex<=rows1, INDEX(data1, rowindex, colindex), IF( rowindex<=rows1+rows2, INDEX(data2, rowindex-rows1, colindex), INDEX(data3, rowindex-rows1-rows2, colindex) ) ), FILTER(合并数据, INDEX(合并数据,,3)=C16, "无匹配数据") )
- 新增工作表时,只需继续嵌套IF,并更新
rowindex的总行数(rows1+rows2+rows3+...) - 同样要注意状态列的序号匹配
错误原因说明
之前添加第三个工作表时出现#VALUE!,是因为没有用嵌套IF分隔不同数据块的行号范围,导致INDEX引用了超出对应数据区域的行号,触发值错误。
内容的提问来源于stack exchange,提问作者Supasyl
相关产品推荐
相关产品推荐

