Performance Excel 2010中的列/行操作(插入、删除)非常慢

Performance Excel 2010中的列/行操作(插入、删除)非常慢,performance,vba,excel,insert,row,Performance,Vba,Excel,Insert,Row,我为Excel2003编写的VBA宏遇到了很大的问题。它从其他文件导入一些数据。结果是Excel文件的文件大小(行数/列数)随每个导入的文件而增加。在Excel2003中,它在前50个导入文件中运行得非常快,然后速度变慢。但是使用Excel2010,即使是少量文件也需要相当长的时间。问题在于执行多次的一条语句: Sheets("Sheetname").Rows(LastRow).Insert Shift:=xlDown 在Excel 2010中,当文件变得越来越大时,这一行需要将近一秒钟的时间


我为Excel2003编写的VBA宏遇到了很大的问题。它从其他文件导入一些数据。结果是Excel文件的文件大小(行数/列数)随每个导入的文件而增加。在Excel2003中,它在前50个导入文件中运行得非常快,然后速度变慢。但是使用Excel2010,即使是少量文件也需要相当长的时间。问题在于执行多次的一条语句:

Sheets("Sheetname").Rows(LastRow).Insert Shift:=xlDown
在Excel 2010中,当文件变得越来越大时,这一行需要将近一秒钟的时间。手动添加行时,我遇到了相同的问题

我通常会做一些事情来提高性能:

Application.ScreenUpdating = False  
Application.DisplayStatusBar = False  
Application.Calculation = xlCalculationManual  
Application.EnableEvents = False  
ActiveSheet.DisplayPageBreaks = False  
ActiveSheet.AutoFilterMode = False

提前感谢你的帮助。我很确定其他人已经遇到了这个问题。

使用Insert很慢,因为它迫使Excel做很多工作。直接从变体向工作表写入大量数据要快得多。
如果要在底部保留一些公式,如总计,则将公式块复制到变量中,将数据写入工作表,调整公式,然后在末尾将其写回会更快。

如果有其他公式引用添加数据的工作表,则可以使用动态范围名称引用数据,或使用普通范围名称引用总公式。

问题在于我应用了条件格式。对于添加到报告中的每一新行,都会创建一个新的条件格式规则,为每一行相同的一列中的单元格着色(例如,格式规则是“如果当前行a列中的单元格包含“已启用”,则将单元格变为绿色”)。
在Excel 2003中,如果Application.Calculation设置为手动或条件格式处理方式不同(我不知道),则条件格式似乎不会重新计算。
知道了这一点,我手动为需要着色的整个列创建了一个条件格式规则,并删除了为电子表格中的单个单元格着色的代码。现在,它在Excel 2010中运行得很快。

我想知道是否有可能提交错误报告(如果Application.Calculation设置为manual,则禁用条件格式重新计算)。

一方有点晚,但首先导入所有数据,然后为一个范围添加格式/条件格式,而不是为每个记录添加新的条件格式。

非常奇怪。。。。插入一行很快。然后,我对一系列行进行排序,结果变得异常缓慢。我在UsedRange之后删除了这一行,它又好了

如果使用条件格式,则使用Insert将减慢进程。所以这里有两种选择。 一个是在运行插入代码之前删除条件格式。下面的代码snippiet将有所帮助

Cells.SpecialCells(xlCellTypeAllFormatConditions).FormatConditions.Delete
第二种选择是,不要在循环中逐个插入行,而是获取需要插入的行数,然后在一行中执行,这将大大减少单次执行的时间。吹代码片段将有助于实现这一点

ActiveCell.EntireRow.Offset(1).Resize(rowCount).Insert Shift:=xlDown

其中rowCount是要插入的行数。

您能找到一种不使用该行插入的方法吗?您是如何添加新信息的?
LastRow
真的是最后一行吗?如果是,为什么要插入而不是复制?之所以使用插入,是因为上一行的格式复制到了新插入的行。但我想我只需要填写数据,而不必关心格式。感谢您的提示,我只需在底部添加数据(请参阅注释)。但问题仍然是,为什么Excel 2010中的插入变得如此缓慢。它在2003年运作良好。我有一个相关的问题,我删除了行,但结果是一样的。可能是因为行和列的数量增加了:insert和delete意味着搜索所有公式,以便可以调整引用。但是工作表中几乎没有公式,Office 2003中的文件也不小。关于公式,我告诉过你什么不完全正确(见我上面的答案)天气与否您使用条件格式应该有一个好的例程,可以为您插入一行,如果这确实是唯一的选项。你应该改变这个问题,因为没有办法从这个问题中得到这个答案。您真正需要的是一种在每次插入后防止公式调整的方法。欢迎使用堆栈溢出!这实际上是一个评论,而不是一个答案。再多一点代表性,你就可以发表评论了。你应该删除这个“答案”。