如何更快地将条件格式化公式应用于大范围

我创build了一个条件格式公式

=AND(SUMPRODUCT(($A$2:$A$" & lastRow & "=$A2)*($CT$2:$CT$" & lastRow & "=$CT2)*($CU$2:$CU$" & lastRow & "=$CU2)*($CV$2:$CV$" & lastRow & "=$CV2)*($CW$2:$CW$" & lastRow & "=$CW2))>1,$CT2 <> """")" 

要根据多种标准(产品的XID(A列),上充电标准1(列CT),上充电标准2(CU列),上充电types(CV列)和上充电电平(CW列))来查找和突出显示重复的上电。 该公式就像一个魅力突出显示重复的费用; 然而,大多数时候我必须将其应用到大量的行(15000以上),并且需要10分钟以上才能应用条件格式公式。 我很好奇,如果有更快的方法将这个公式应用到许多细胞。 我的整个代码供参考

 'File Complete, highlights duplicate upcharges for products and skips over blank upcharge rows Sub dupUpchargeCheck() Dim lastRow As Integer lastRow = ActiveSheet.Cells(Rows.Count, "CS").End(xlUp).Row ActiveSheet.Range("CS2:CS" & lastRow).Select With ActiveSheet.Range("CS2:CS" & lastRow) .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(SUMPRODUCT(($A$2:$A$" & lastRow & "=$A2)*($CT$2:$CT$" & lastRow & "=$CT2)*($CU$2:$CU$" & lastRow & "=$CU2)*($CV$2:$CV$" & lastRow & "=$CV2)*($CW$2:$CW$" & lastRow & "=$CW2))>1,$CT2 <> """")" .FormatConditions(.FormatConditions.Count).Interior.ColorIndex = 3 End With End Sub 

任何build议表示赞赏!

编辑:

在玩了一段时间之后,我意识到我的问题不是将条件格式化公式应用于单元格范围,而是实际上当我单击下拉菜单来过滤颜色时(在代码运行之后,条件格式是应用)它需要永远的filter下拉框出现(我假设,因为所有的公式计算?)。 任何想法如何解决这个问题? 我已经尝试了@Nate calcState = Application.Calculationbuild议之一,把它放在我过滤(通过VBA)的行之前,希望它会停止计算运行,因为系统试图显示filter框,但它仍然需要永远。 加上Application.ScreenUpdating = False ,处理时间花费的时间稍less一些(15000行约551秒)。 我恐怕这可能是最好的,除非别人有任何build议,否则我可以得到它。

尝试在您的代码之前closures一些Excelfunction,然后在完成时将其重新打开。

 ' turn off unnecessary excel features, put before your code screenUpdateState = Application.ScreenUpdating statusBarState = Application.DisplayStatusBar calcState = Application.Calculation eventsState = Application.EnableEvents displayPageBreakState = ActiveSheet.DisplayPageBreaks Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False 

然后

 ' Turn features back on Application.ScreenUpdating = screenUpdateState Application.DisplayStatusBar = statusBarState Application.Calculation = calcState Application.EnableEvents = eventsState ActiveSheet.DisplayPageBreaks = displayPageBreaksState 

这并没有帮助我,但我希望它能帮助你,因为这个链接说:

当条件适用于大范围时,这是特别有用的,因为在这些情况下性能可能会变慢。

 ActiveSheet.EnableFormatConditionsCalculation = False '..... ActiveSheet.EnableFormatConditionsCalculation = True 

也许这不适用于MAC。 Mac上的VBA for Excel 2011不支持ActiveSheet.EnableFormatConditionsCalculation