数组公式是否可以替代循环?

时间:2015-12-02 16:26:13

标签: vba excel-vba excel

我一直在使用VBA一段时间,并开始认为我经常使用循环太快。它们似乎效率低下且有时很麻烦。但是,在浏览其他现实生活中的例子时,我没有遇到太多的选择,所以我想知道是否有人尝试使用数组公式,如果有任何缺点我不考虑。

显然我知道这个替代品不能替换大多数循环,但是对于很多简单的工作表循环它可能会。我使用这个子来轻松演示当显示仅500行的月份名称时,数组公式如何比循环快13秒。

Sub speedtest()

Dim sht As Worksheet
Dim time2 As Date
Set sht = ActiveSheet

Application.ScreenUpdating = False

With sht
    .Range("A1").Value = "Dates"
    .Range("B1").Value = "Array Formula"
    .Range("C1").Value = "Loop"
    .Range("F1").Value = "Formula Time - seconds"
    .Range("G1").Value = "Loop Time - seconds"
    .Columns("A").NumberFormat = "m/d/yyyy"
    .Range("A2:A500").Formula = "=RANDBETWEEN(41817, 42395)"
    .Range("A2:A500").Value = .Range("A2:A500").Value
    'Array formula
    time2 = Now
    .Range("B2:B500").FormulaArray = "=TEXT(A2:A500," & Chr(34) & "mmmm" & Chr(34) & ")"
    .Range("B2:B500").Value = .Range("B2:B500").Value
    .Range("F2").Value = (Now - time2) * 24 * 60 * 60
    'Loop
    time2 = Now
    For x = 2 To 500
        .Range("C" & x).Value = Format(.Range("A" & x).Value, "mmmm")
    Next x
    .Range("G2").Value = (Now - time2) * 24 * 60 * 60
    .Columns("A:G").AutoFit
End With

Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:1)

我几乎总是喜欢使用数组:

1)他们会更快。

2)他们倾向于减少VBA的数量。没有坏事:VBA被认为是一种安全隐患;许多机构不允许xlsm工作簿。

3)很难意外地改写数组公式。这有助于减少电子表格的使用。

一个例外:我确实发现单细胞数组公式有害:在编辑后很容易“取消排列”它们。