我发现在表结构或正常单元格中插入行 - 手动或其他 - 非常非常慢。就像在一个表中(仅包含文字字符串)或在相邻单元格中,在没有条件格式的工作表中插入7行需要超过10分钟。
该工作簿有45个工作表和20个表,较大的表具有大约10KB的XML文件。有大约33MB的电子表格XML,大多数大约300KB,5个超过1MB,一个是15MB。它相当复杂,但不是很大。所有的计算都很好地从左到右一直向下流动,从右到右到另一张,我主要设法避免使用数组公式。所有表都有规则结构,计算列只有一个公式。大多数表格列都是计算出来的,只有几个较小的列包含文字数据。
我确实在几张纸上有很多条件格式,但是我一直非常小心地保持它理性并阻止它碎片化:我对整张纸有大约45条规则,这些规则被推广到涵盖所有列。格式化决策的主要处理作为辅助列移入表中,正如我所说,结构非常规则。
似乎这些类型的编辑不是线程安全的,因此只有一个处理器正在加载并且光盘活动非常轻。我无法理解excel一直在做什么。 当然我把计算设置为手动...
我已经看到评论将此类事物归因于增加的行和列限制,但我不明白为什么这应该是一个因素。如果我查看电子表格的XML文件,则只有行或列的代码会被值或公式占用。那么为什么无人居住的细胞在起作用?
这对我的工作效率产生了巨大影响 - 虽然我在新发现的业余时间阅读这样的网站,但我学到了很多东西。我真的需要弄清问题是什么,以便我尽可能避免或解决这个问题。
有人可以帮我吗?
万一人们对此感到疑惑,答案是在Excel中使用电源查询和电源视图。我发现中等(500k行)数据集和复杂的结构和转换都顺利完成。我再也不会在表格中使用公式了。另一件事是,这自然会让你获得伟大的力量。这是我的小费。
答案 0 :(得分:3)
插入时间过长可能是由于引用整列或整行的INDEX(或其他函数)造成的。
我有一个非常类似的问题:不是太复杂的工作表(大约2500行,有15列数据(来自查询的结果),以及大约10列公式从查询结果中提取数据。当我插入一列时,第一列可能会在4秒左右插入,但第二个插入将花费一分钟。哎呀!我搜索了互联网并找到了这个网站http://support.microsoft.com/kb/2755145。
我的经历:
我使用的公式如= INDEX(11:11,1,MATCH(AC $ 5,$ 10:$ 10,0)),在我的工作表中大约25000次。您可以看到每个公式引用整行两次。显然,当我添加一个列时,由于每一行都受到影响,因此我的每个公式都受到影响,Excel会尽职尽责地试图找出该怎么办。
根据我从微软网站上学到的内容,我将公式更改为= INDEX(QueryResults,ROW() - ROW(QueryHeaders),MATCH(AC $ 5,QueryHeaders,0)),其中QueryResults和QueryHeaders很简单命名范围。
在整个工作表中进行此更改后,插入一个列几乎是瞬间 - 不到一秒钟。
答案 1 :(得分:1)
这听起来像这里描述的问题http://fastexcel.wordpress.com/2012/01/30/excel-2010-tableslistobject-slow-update-and-how-to-bypass/
如果是这样,你必须打破其中一个条件来绕过它:
为了减缓这种情况,必须满足以下每个条件:
A cell within the Table must be selected
The sheet containing the Table must be the Active Sheet
The cell being updated must be on the same sheet as the table, but does not have to be within the table
There must be a reasonable number of formulas in the workbook.
也许你可以通过VBA间接更新另一张活动表。或者将所有公式移动到单独的工作簿中会绕过它。
或者将表格转换回正常范围(如果需要,可以使用动态范围名称)
答案 2 :(得分:0)
尝试删除条件格式,然后在主代码完成后使用vba重新应用它。为我工作。