【发布时间】:2016-11-22 03:56:13
【问题描述】:
如果我运行以下代码
Sub Test_1()
Cells(1, 1).ClearContents
Cells(2, 1).Value = ""
End Sub
当我使用公式 ISBLANK() 检查 Cells(1, 1) 和 Cells(2, 1) 时,两个结果都返回 TRUE。所以我想知道:
Cells( , ).Value = ""和Cells( , ).ClearContents有什么区别?
它们本质上是一样的吗?
如果我然后运行以下代码来测试方法之间的时间差:
Sub Test_2()
Dim i As Long, j As Long
Application.ScreenUpdating = False
For j = 1 To 10
T0 = Timer
Call Number_Generator
For i = 1 To 100000
If Cells(i, 1).Value / 3 = 1 Then
Cells(i, 2).ClearContents
'Cells(i, 2).Value = ""
End If
Next i
Cells(j, 5) = Round(Timer - T0, 2)
Next j
End Sub
Sub Number_Generator()
Dim k As Long
Application.ScreenUpdating = False
For k = 1 To 100000
Cells(k, 2) = WorksheetFunction.RandBetween(10, 15)
Next k
End Sub
我的机器上运行时得到以下输出
.ClearContents .Value = ""
4.20 4.44
4.25 3.91
4.18 3.86
4.22 3.88
4.22 3.88
4.23 3.89
4.21 3.88
4.19 3.91
4.21 3.89
4.17 3.89
基于这些结果,我们看到方法.Value = "" 平均比.ClearContents 快。这是真的吗?为什么会这样?
【问题讨论】:
-
我认为你的计时测试一针见血。我的猜测是,如果您希望保留数字格式,那么清晰的内容是有益的,这可能会被空字符串覆盖。不过,可能还有比这更多的细微差别,但如果是这样,我不知道
-
.Value=""只是在单元格中放置一个长度为零的字符串,因此您只是在向它写入一个新值(它在技术上不是空白...)@ 987654330@ 实际上是删除单元格的.Value,我想这在内存管理方面有更多的开销。 -
@MacroMan 使用数学类比,您是否暗示
.Value=""等于0 而.ClearContents等于一个空集?无论如何,感谢 RGA 编辑我的问题。 -
我个人会使用
Value = ""或Value = vbNullString方法而不是ClearContents,因为后者可能会因合并单元格而失败。 -
.clearcontents最糟糕的地方是它破坏了.copy,而=VbNullString没有
标签: vba excel syntax difference