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

时间:2014-07-09 21:33:06

标签: excel vba excel-vba conditional-formatting

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

不幸的是,此操作在i5 4670k上需要约35分钟。我正在运行的宏中进行了许多其他操作,但我已将速度问题与条件格式应用程序隔离开来。

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

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:根据要求,这是截屏Here's what I want

基本上,有两种类型的列。需要格式化的列(绿色)以及格式将基于的列(黄色)。对于每一行,我都会查看其他每一列(在这种情况下,我只将格式应用于绿色列 - 因此i * 2偏移)。有时我想将条件格式(如果单元格中的值不是空白或日期)应用于单元格。如果我这样做,我想在右边(黄色列)立即应用基于单元格的最大值数据库。最终,黄色列将被隐藏。

编辑3:我找到了解决方案(见下文)。问题在于删除单元格的部分代码。如此大量的条件格式规则会大大减慢任何单元格的删除速度,导致程序运行速度非常慢。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。

该程序的第一步是删除多个单元格。

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

尝试删除仍然适用所有规则的单元格的速度非常慢。因此,对此进行编码的最佳方法是首先执行所有单元格删除,然后在程序结束时应用所有条件格式。