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秒。并且经常做出改变。
有没有其他方法可以使文件更轻而不损失速度?
限制:
更新:@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)
根据@iDevlop的建议,SUMPRODUCT我得出了这个公式:
=SUMPRODUCT(TOCOL(first:second!C2),N(TOCOL(first:second!$B2)=$B2))
Run Code Online (Sandbox Code Playgroud)
在 中C2,向下并向右拖动。
结果:
速度和整体性能还有待测试,但乍一看它看起来非常有前途。与原始帖子中提出的公式相比,更重要的文件大小减少了4 倍SUMIF(在原始工作中) 。
| 归档时间: |
|
| 查看次数: |
978 次 |
| 最近记录: |