这里是简化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进行访问
- 无法使用手动重新计算,因为它由多人持续监控,并且需要在现场看到更改
1条答案
按热度按时间wlp8pajw1#
我想到了从名称管理器中使用一个自定义函数。类似
=TOCOL(GET.WORKBOOK(1))
这样的函数会溢出所有工作表名称,但它需要将工作簿另存为.xlsm
。所以我想到了另一个想法。如果工作表总是按顺序排列,则可以执行以下操作:现在,让我们将其合并到
REDUCE()
中,以填充每个sum-sheet中的所有单元格:第一节第一节第一节第一节第一次
C2
中的公式:请注意,“last”只是一个占位符,表示要求和的工作表序列中的最后一个工作表。我希望下面的可视化内容将有助于涵盖所实现理论的基础知识: