簡體   English   中英

如何更快地將條件格式公式應用於大范圍

[英]How to apply conditional formatting formula to large range faster

我創建了一個條件格式公式

=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列),附加費類型(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

任何建議表示贊賞!

編輯:

經過一番摸索之后,我意識到我的問題不在於將條件格式公式應用於單元格范圍,而是實際上當我單擊下拉列表以對顏色進行過濾(在代碼運行並且會應用條件格式),過濾器下拉框將永遠顯示(我假設是因為當時所有公式都在計算?)。 知道如何解決這個問題嗎? 我嘗試了calcState = Application.Calculation的@Nate建議之一,將其放置在我通過vba進行過濾的行的前面,希望當系統嘗試顯示過濾器框時,它將阻止計算的運行,但是它仍然需要永遠。 通過添加Application.ScreenUpdating = False ,處理時間將花費更少的時間(15000行的時間大約為551秒)。 除非有人有任何建議,否則恐怕這是我能得到的最好的選擇?

嘗試在代碼之前關閉一些Excel功能,然后在完成后將其重新打開。

' 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上的Excel 2011在VBA中不支持ActiveSheet.EnableFormatConditionsCalculation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM