不使用 INDIRECT 的多张表中的 SUMIF

use*_*393 5 excel excel-formula

这是我正在处理的简化 EXCEL 文件。数据表 1首先调用:

在此输入图像描述

数据表 2 称为第二个

在此输入图像描述

数据结构和范围(C2:E8)相同。我需要根据 B 列(选项)中的标准对这些表进行求和。

我期望的结果: option1_sum表:

在此输入图像描述

option2_sum表:

在此输入图像描述

要测试的表:

首先表:

ID 选项 结果1 结果2 结果3
1 1 10 10 10
2 1 20 20 20
3 1 30 30 30
4 2 40 40 40
5 2 50 50 50
6 1 60 60 60
7 1 70 70 70

第二张:

ID 选项 结果1 结果2 结果3
1 1 100 100 100
2 2 200 200 200
3 1 300 300 300
4 2 400 400 400
5 1 500 500 500
6 1 600 600 600
7 1 700 700 700

我可以通过将此公式放入求和表中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")))其中 Sheetlist 被命名为列表:

在此输入图像描述

它确实有效,它更短,并使文件轻3倍以上,但由于INDIRECT公式不稳定,每次在数据表中进行更改时,它都会冻结Excel 5秒。并且经常做出改变。

有没有其他方法可以使文件更轻而不损失速度?

限制:

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

更新:@JvdV 建议的公式有效,但添加 10 多个工作表后,每次重新计算都需要超过 5 秒。

更新了所述公式以包含空白单元格:

=LET(x,WRAPROWS(TOCOL(first:last!A1:E8,0),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))
Run Code Online (Sandbox Code Playgroud)

use*_*393 1

根据@iDevlop的建议,SUMPRODUCT我得出了这个公式:

=SUMPRODUCT(TOCOL(first:second!C2),N(TOCOL(first:second!$B2)=$B2))
Run Code Online (Sandbox Code Playgroud)

在 中C2,向下并向右拖动。

结果:

在此输入图像描述

速度和整体性能还有待测试,但乍一看它看起来非常有前途。与原始帖子中提出的公式相比,更重要的文件大小减少了4 倍SUMIF(在原始工作中) 。