在VBA中应用单独的条件格式 – 非常慢

由于数据库的限制(即他们不能使用相对引用的分钟和最大,我添加一个人),我添加一个单独的条件格式规则(每个单元格的select是13列宽)在810行。

不幸的是,这个操作在i5 4670k上花了大约35分钟。 一些其他的操作发生在我正在运行的macros,但我已经把速度问题隔离到条件格式化的应用程序。

有没有人有任何加快代码的build议? 这是精简版的程序。

for RowCounter = FirstRow to Lastrow for i = 0 to 12 ' Add Databars Range(FirstColumn & RowCounter).Offset(0, 2 * i).FormatConditions.AddDatabar With Range(FirstColumn & RowCounter).Offset(0, 2 * i).FormatConditions(1) .MinPoint.Modify xlConditionValueNumber, 0 .MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:= _ Range(FirstColumn & RowCounter).Offset(0, 2 * i + 1).Value End With Next i Next RowCounter 

编辑2:按照要求,这里是一个截图 这是我想要的

本质上,有两种types的列。 需要格式化的列(绿色)以及格式化所基于的列(黄色)。 对于每一行,我正在查看其他所有列(在这种情况下,我只将格式应用于绿色列 – 因此是i * 2偏移量)。 有时我想将单元格中的条件格式(如果单元格中的值不是空白或date)应用。 如果是这样的话,我想立即在右边(黄色的列)根据单元格应用一个最大的数据条。 最终,黄色的列将被隐藏起来。

编辑3:我find了解决scheme(见下文)。 问题在于删除单元的部分代码。 有了这么大量的条件格式化规则,这大大减缓了任何单元的删除,导致程序运行得非常缓慢。

我终于想出了解决scheme。

程序的第一步是删除一些单元格。

第二步是应用〜5000条件格式规则(对每个单独的单元格)。

试图删除所有仍在应用这些规则的单元格是非常缓慢的。 因此,编码的最好方法是首先完成所有的单元格删除,然后在程序结束时应用所有的条件格式。