【发布时间】:2016-09-09 17:57:00
【问题描述】:
我希望提高这个 Excel VBA 嵌套循环的速度。该循环将日期从一张纸与第二张纸进行比较。如果它们匹配,我会更改单元格周围的边框以突出显示它。它目前工作正常,但每个 sub 大约需要 30 秒来处理。有没有办法实现一个数组或其他策略来加速它?提前致谢!
Sub Single()
Dim DateRng As Range, DateCell As Range, DateRngPay As Range
Dim cellA As Range
Dim cellB As Range
Dim myColor As Variant
Set DateRng = ActiveWorkbook.Worksheets("SS").Range("B11:F16,I11:M16,P11:t16,B19:F24,I19:M24,P19:t24,B27:F32,I27:M32,P27:t32,B35:F40,I35:M40,P35:t40")
Set DateRngPay = ActiveWorkbook.Worksheets("PS").Range("C2:C67")
myColor = Array("38")
If ActiveWorkbook.Worksheets("Info").Range("B67") = 1 Then
With DateRng
.Interior.ColorIndex = xlColorIndexNone
'.Borders.LineStyle = xlContinuous
.Borders.ColorIndex = 1
.Borders.Weight = xlHairline
For Each cellA In DateRng
For Each cellB In DateRngPay
If cellB.Value > "" And cellA.Value > "" And cellB.Value = cellA.Value Then
With cellA.Borders
.ColorIndex = myColor
.Weight = xlMedium
End With
Exit For
End If
Next cellB
Next cellA
End With
End If
End Sub
【问题讨论】:
-
如果这个方法有效并且你想让它更快,它应该在codereview.stackexchange.com,因为它不是这个论坛的主题。
-
如果您愿意,请给我发消息,因为我不经常检查 codereview。肯定是数组。
-
使用字典来保存一张表中的数据以便与另一张表中的数据进行比较,这是将二次算法转换为线性算法的标准 VBA 技巧。我的猜测是,您应该能够将 30 秒缩短到几分之一秒。
-
也许你可以使用
Conditional Formatting -
@RonRosenfeld Nah——太简单了。如果你让太多人知道这一点,VBA 程序员可能会发现谋生更加困难。
标签: arrays vba excel nested-loops