.Value =“”和.ClearContents之间有什么区别?

如果我运行下面的代码

Sub Test_1() Cells(1, 1).ClearContents Cells(2, 1).Value = "" End Sub 

当我使用公式ISBLANK()检查单元格(1,1)和单元格(2,1 ISBLANK()两个结果都返回TRUE 。 所以我想知道:

Cells( , ).ClearContents Cells( , ).Value = ""Cells( , ).ClearContents ?之间的区别是什么?

他们基本上是一样的吗?


如果我然后运行下面的代码来testing方法之间的时间差异:

 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 = vbNullString,因为这是最有效的。

“ClearContents”正在检查和更改单元格中的其他属性,如格式和公式(这在技术上是一个与Value不同的属性)。 当使用Value =“”你只是改变一个属性,所以它更快。 使用vbNullString会提示编译器,您使用的是空string,而使用双引号的方式是使用空string,因此需要一个通用string。 因为vbNullString提示它期望一个空string,所以它可以跳过一些步骤,并获得性能提升。

您可以注意到Excel电子表格中的重大差异。

假设B1由公式返回空格A1 = 5 B1 =“= if(A1 = 5,”“,”x“)

在这种情况下,你必须用C1(1)C1 = <=空白(B1)>(2)C1 =

解决scheme1将返回false,因为单元格填充方程式解决scheme2将返回True