我一直在使用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
答案 0 :(得分:1)
我几乎总是喜欢使用数组:
1)他们会更快。
2)他们倾向于减少VBA的数量。没有坏事:VBA被认为是一种安全隐患;许多机构不允许xlsm
工作簿。
3)很难意外地改写数组公式。这有助于减少电子表格的使用。
一个例外:我确实发现单细胞数组公式有害:在编辑后很容易“取消排列”它们。