请教用公式跨工作表统计
如图,假设一个工作簿有1-12月12张工作表,每张表格式一样但行数不一样,如何使用filter函数跨12张表筛选每张表的数据?
方案一:
=VSTACK(FILTER('1月'!A:C,('1月'!A:A="部门1")*('1月'!B:B="a")),FILTER('2月'!A:C,('2月'!A:A="部门1")*('2月'!B:B="a"))............)
可以实现,速度快,但公式繁琐
方案二:
=DROP(REDUCE("",SEQUENCE(12),LAMBDA(x,y,VSTACK(x,FILTER(INDIRECT("'"&y&"月'!A:C"),(INDIRECT("'"&y&"月'!A:a")="部门1")*(INDIRECT("'"&y&"月'!b:b")="a"))))),1)
可以实现,但indirect效率低
方案三:
=REDUCE("",SEQUENCE(12),LAMBDA(x,y,LET(a,TRIMRANGE(INDIRECT("'"&y&"月'!A:C")),b,FILTER(a,(CHOOSECOLS(a,1)="部门1")*(CHOOSECOLS(a,2)="a")),IF(x="",b,VSTACK(x,b)))))
可以实现,但indirect效率低
方案四:
=LET(a,VSTACK('1月:12月'!A1:C1000),FILTER(a,(CHOOSECOLS(a,1)="部门1")*(CHOOSECOLS(a,2)="a")))
可以实现,但行数要比较确定,还不能多
方案五:
=LET(a,VSTACK('1月:12月'!A:C),FILTER(a,(CHOOSECOLS(a,1)="部门1")*(CHOOSECOLS(a,2)="a")))
#NUM!,应该是行数超了
方案六:
=LET(a,VSTACK(TRIMRANGE('1月:12月'!A:C)),FILTER(a,(CHOOSECOLS(a,1)="部门1")*(CHOOSECOLS(a,2)="a")))
#VALUE!,应该是不支持TRIMRANGE('1月:12月'!A:C)的写法
方案七:
=LET(a,WRAPROWS(TOCOL(TRIMRANGE(HSTACK('1月:12月'!A:C))),3),FILTER(a,(CHOOSECOLS(a,1)="部门1")*(CHOOSECOLS(a,2)="a")))
可以实现,但仅限每张表格式都要一样,列数也不能太多
现在的问题是,有什么更好的方法吗?如果每张表的格式不同,列数不同,但每张表都有一列“部门”,通过筛选每张表的“部门列”要把不同格式的表也拼起来,又如何做到?
@WPS产品体验官
WPS函数专家