excel 不使用INDIRECT的多工作表中的SUMIF

cqoc49vn  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(166)

这里是简化EXCEL文件我的工作。数据表1称为"第一":

数据表2称为"第二":

数据结构和范围(C2:E8)相同。我需要根据B列(选项)中的标准对这些工作表求和。
我预期的结果:选项1_汇总表:

选项2_汇总表:

我可以把这个公式放在求和表C2中,然后拖动到E8
=SUMIF(first!$B2,$B$2,first!C2)+SUMIF(second!$B2,$B$2,second!C2)
或者这个:
=IF(first!$B2=$B$2,first!C2,0)+IF(second!$B$2=$B2,second!C2,0)
这些工作如预期。计算速度快。问题是在原始文件中有~100个数据表要求和,每个表中的面积超过30000个单元格。公式变得很长,文件变得太重,需要很长时间才能打开。
如果不存在IF条件,我会这样计算:
=sum(first:second!C2)
我期望SUMIF的工作方式是这样的:
=SUMIF(first:second!$B2,$B$2,first:second!C2)
不幸的是,我发现的每一个解都使用INDIRECT公式,如下所示:=SUMPRODUCT(SUMIF(INDIRECT("'"&Sheetlist&"'!B2"),$B$2,INDIRECT("'"&Sheetlist&"'!C2"))),其中图纸列表命名为list:

它确实工作,它是短得多,使文件轻超过3倍,但因为INDIRECT是易失性公式,它冻结excel为5秒钟,每次更改数据表。
有没有其他方法可以使文件更轻而不损失速度?
局限性:

  • 无法使用VBA,因为它存储在Sharepoint中,可通过Excel 365和浏览器Excel进行访问
  • 无法使用手动重新计算,因为它由多人持续监控,并且需要在现场看到更改
wlp8pajw

wlp8pajw1#

我想到了从名称管理器中使用一个自定义函数。类似=TOCOL(GET.WORKBOOK(1))这样的函数会溢出所有工作表名称,但它需要将工作簿另存为.xlsm。所以我想到了另一个想法。如果工作表总是按顺序排列,则可以执行以下操作:

=WRAPROWS(TOCOL(first:last!A:E,1),5)

现在,让我们将其合并到REDUCE()中,以填充每个sum-sheet中的所有单元格:
第一节第一节第一节第一节第一次
C2中的公式:

=LET(x,WRAPROWS(TOCOL(first:last!A:E,1),5),IFERROR(DROP(REDUCE(0,A2:A8,LAMBDA(a,b,VSTACK(a,BYCOL(FILTER(DROP(x,,2),(TAKE(x,,1)=b)*(INDEX(x,,2)=B2),0),LAMBDA(c,SUM(c)))))),1),0))

请注意,“last”只是一个占位符,表示要求和的工作表序列中的最后一个工作表。我希望下面的可视化内容将有助于涵盖所实现理论的基础知识:

相关问题