【问题标题】:Conditional Formatting vs VBA formatting speed/memory条件格式与 VBA 格式速度/内存
【发布时间】:2016-07-23 02:40:57
【问题描述】:

我正在开发一个模板电子表格,它会在刷新时调整数据数组的大小。目前我正在使用条件格式在数组增长时添加边框,反之亦然。

在刷新单元格时使用 VBA 格式化单元格而不是让大部分工作表服从条件格式化规则是否更简洁?一个与另一个有什么好处?

谢谢!

【问题讨论】:

  • 我假设数据数组表示工作表中的行列表。如果您不允许您的用户编辑工作表,条件格式仍然可以使用。但是条件格式会出现问题,当一些用户在单元格周围移动时,插入具有条件格式的列或复制粘贴单元格。
  • 当且仅当,格式只会在您的 VBA 代码执行后更改,那么为了获得更好的性能,您应该使用 VBA 格式。因为条件格式就像公式,当工作表有变化时它会刷新/计算。

标签: vba performance excel conditional-formatting


【解决方案1】:

考虑以下代码:

Option Explicit

Private Sub fill()
    Dim i As Long
    Dim num As Long

    Randomize

    For i = 1 To 500000
        num = Int(50 * Rnd) + 1
        Sheet1.Cells(i, 1).Value = num
        Sheet1.Cells(i, 2).Value = num
    Next
End Sub

Sub format()
    Dim i As Long

    Debug.Print Now
    With Sheet1
        For i = 1 To .UsedRange.Rows.Count
            If .Cells(i, 1).Value > 20 Then .Cells(i, 1).Interior.ColorIndex = 20
        Next
    End With
    Debug.Print Now
End Sub

Sub conditionally_format()
    Debug.Print Now

    With Sheet1.Columns(2)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=40"
        .FormatConditions(1).Font.Color = -16383844
        .FormatConditions(1).Font.TintAndShade = 0
        .FormatConditions(1).Interior.PatternColorIndex = xlAutomatic
        .FormatConditions(1).Interior.Color = 13551615
        .FormatConditions(1).Interior.TintAndShade = 0
    End With

    Debug.Print Now
End Sub

在我的 HP-asaurus 上,我得到以下结果

format:
7/22/2016 1:10:34 PM
7/22/2016 1:10:49 PM
conditionally_format:
7/22/2016 1:25:06 PM
7/22/2016 1:25:07 PM

但是,应该注意conditionally_format 子的结果表示运行该代码所需的时间,而不是实际有条件地格式化单元格。我不知道如何衡量,除非通过更改电子表格上的值并查看需要多长时间。即使这样做,也是不可能的,因为它发生得如此之快,以至于我无法测量它。这意味着循环每个单元格的代码运行速度比设置条件格式要慢很多。这确实是意料之中的,因为 Excel 正在加载每个 Cell 对象,然后检查单元格对象 .Value,然后根据该评估设置 Interior.ColorIndex 属性。除了 VBA 不在图片之外,条件格式也是如此。它是执行操作的 Excel 的底层(和优化的)编译代码。速度差异大吗?并不真地。我的慢速笔记本电脑在 15 秒内完成了 50 万次比较,与通过条件格式规则进行的基本瞬时格式比较。

好处...这是一个更艰难的决定。我认为更多的最终用户会理解条件格式规则,这也意味着更多的最终用户可以使用它们。这可能是不可取的。它更干净吗?再次艰难的召唤。如果您从 UI 设置格式规则,开发人员可能不会考虑查找任何条件格式规则,并且由于 IDE 中没有显示有关条件格式的任何内容,这再次可能导致不良后果。过去有bugs with conditional formatting,但我不知道这是否仍然是一个问题。我认为您最终选择的方法将归结为您希望为最终用户提供多少控制权与您希望创建多少代码。

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多