![编辑:](https://linux22.com/image/1622260/%E7%BC%96%E8%BE%91%EF%BC%9A.png)
我有一个包含 2,800 多张工作表的工作簿(除 4 张外,其余均隐藏)。我注意到的一件事是,对于这么大的工作簿,Excel 似乎会停止自动计算(例如,当我切换工作表时,我必须单击“立即计算”按钮才能显示值,即使工作簿计算设置为“自动”)。
到目前为止,这都不是问题。两个可见的工作表汇总了隐藏工作表中的数据,我现在想比较两个工作表上的数据。但是,当我引用另一张工作表时,返回的值为“#REF”,因为只有当我在该工作表上单击“立即计算”按钮时才会计算该值。
作为一种解决方法,我可以将两张汇总表中的一张的内容移动到第一张汇总表中,这样所有数据都在一张表上,但我认为应该有一种更简单的方法来做到这一点。以下是我迄今为止尝试过的方法:
- 使用该
INDIRECT()
函数尝试欺骗 Excel 重新评估另一张工作表。 - 使用 Ctrl/Shift/Alt+F9 的几种组合来强制重新计算整个工作簿(参见此处:关联)。
这两个选择都没有起作用。
编辑:
对评论中问题的回答:
- 我为什么要这么做?我跑FEA 模拟在为开利公司生产的水冷式商用冷水机组。这些系统有数百个传热管,它们通过我们所谓的“管板”固定在系统的两端。这些管插入的孔相对靠近,因此通常是最高应力所在。表征这种应力的方法之一是找到平均最大主应力穿过两个管孔之间最薄处的韧带表面。我可以从Ansys沿着该位置的路径,但我必须在 Excel 中计算平均值,这可以通过将数据从 Ansys 导出到 TSV 文件来完成,然后将其导入 Excel。由于我所查看的系统在管孔之间有 348 条韧带,并且我正在比较 5-8 个模拟(其数据由 VBA 导入),因此工作簿最终约为 22 MB。
- 虽然打开 Excel 需要很长时间,但打开后实际上不会占用太多 RAM(约 480 MB)。话虽如此,资源使用情况对我来说并不是那么令人担心。我有一台笔记本电脑和一台台式机,因为我在台式机上运行模拟,所以它非常强大(256 GB RAM、24 核、24 GB 显卡、2.4 TB 硬盘)。但是,我相信我的笔记本电脑也能应付自如,因为它有 32 GB RAM。这有点不方便,因为通常比平时更慢,但除了上面描述的问题外,我没有遇到任何问题。
答案1
根据答案这里和这里听起来 Excel(这并不奇怪)在使用非常大的工作簿时会变得不稳定。这种情况的早期症状之一是工作簿停止自动计算。因此有两种可能的解决方案:
- 使用 VBA 打开源数据文件,对文件运行必要的计算,然后将结果值输入摘要表的相应单元格中。
- 准备一个包含所有导入的数据表和单个汇总表的大型工作簿。然后将汇总表中的值复制/粘贴到新工作簿中,汇总表中的值随后用于进一步计算。
选项 1 更为可靠,因为可以完全避免与大文件相关的风险。选项 2 更简单,并且可能导致后续问题更少,因为更改摘要表上的计算不需要 VBA 再次打开所有 TSV 文件(这将花费几个小时)。总而言之,除非大型工作簿损坏到无法使用的程度,否则应使用选项 2。