【发布时间】:2016-05-13 01:13:32
【问题描述】:
我创建了一个条件格式公式
=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 列)、Upcharge 标准 1(CT 列)、Upcharge 标准 2(CU 列)、Upcharge 类型(CV 列)和 Upcharge 水平(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
感谢任何建议!
编辑:
玩弄了一下之后,我意识到我的问题不在于将条件格式公式应用于单元格范围,而是实际上当我单击下拉菜单以过滤颜色时(在代码为运行并应用条件格式)过滤器下拉框需要永远出现(我假设是因为当时所有的公式都在计算?)。知道如何解决这个问题吗?我已经尝试过@Nate 的建议之一
@ 987654323@,将它放在我过滤(通过vba)的行之前,希望它会在系统试图显示过滤器框时停止计算,但它仍然需要永远。加上Application.ScreenUpdating = False,处理时间会稍微减少(15000 行的时间约为 551 秒)。除非其他人有任何建议,否则恐怕这可能是我能得到的最好的了?
【问题讨论】:
-
如果您使用的是 Excel 2007 或更高版本,请使用
COUNTIFS而不是SUMPRODUCT。 -
找到重复项并用颜色标记它们的最终目标是什么?你想删除它们或将它们存储在其他地方还是什么?它实际上可能会更优雅地解决。
-
不,解决方案要复杂得多。基本上,必须在每对副本中的一个上更改某些内容(无论是更改 Upcharge 类型还是 Upcharge 级别等),因此它们并不完全相同。所有附加费必须保留。
标签: vba excel excel-formula conditional-formatting