2016-07-19 48 views
9

如果我運行下面的代碼.Value =「」和.ClearContents之間有什麼區別?

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

當我檢查將細胞(1,1)和細胞(2,1),使用式ISBLANK()兩個結果返回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快。這是真的嗎?爲什麼這樣?

+0

我想你用定時測試擊中頭部,我的猜測是明確的如果您希望保留數字格式,則nts是有益的,可以用空字符串覆蓋。雖然可能有更多的細微差別,但如果是這樣,我不知道它 – RGA

+2

'.Value =「」'只是在單元格中放置一個零長度的字符串,所以你只是寫一個新的值(_it在技術上不是空白的......_)'.ClearContents'實際上是刪除單元格的'.Value',我想在內存管理方面會有更多的開銷。 –

+0

@MacroMan使用數學類比,你是否暗示'.Value =「」'等於0並且'.ClearContents'等於一個空集?無論如何,感謝RGA編輯我的問題。 –

回答

1

從我發現的情況來看,如果你的目標是簡單地有一個空單元格,而你不想改變格式化的任何內容,那麼應該使用Value = vbNullString,因爲這是最有效的。

'ClearContents'正在檢查和更改單元格中的其他屬性,例如格式和公式(技術上這是一個與Value不同的屬性)。當使用Value =「」時,您只更改一個屬性,因此速度更快。使用vbNullString會提示編譯器,您使用的是空字符串,而使用雙引號的方式是使用空字符串,因此需要使用通用字符串。因爲vbNullString會提示它期望一個空字符串,所以它可以跳過一些步驟並獲得性能提升。

+1

如何改變單元格的'.Value'以避免改變單元格的'.Formula'?這沒有什麼意義。此外,刪除單元格值的任何方法都不會影響格式。 – Comintern

+0

如果您使用宏輸入公式,則應該設置Range.Formula屬性或Range.FormulaR1C1屬性。您可以使用'.Value'屬性設置公式,Excel將自動實現這個公式並將其移至您的位置(我不確定,但我會想象舊版本的ExcelVBA不會自動爲您移動它) 。因此使用Range.ClearContents檢查.Formula參數和.Value。如果您的.Value沒有以「=」開頭,那麼除了清除或忽略它之外,它不會對.Formula執行任何操作。 – NPComplete

+0

所以你在說當設置'.Value'時,Excel必須檢查'.Formula'是否需要改變,但是它不需要檢查'.ClearContents'它是否以某種方式更快因爲它正在做更多的工作?這使得更沒有意義。 – Comintern

-1

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

假設B1由方程填充返回空白 A1 = 5 B1 = 「=如果(A1 = 5」,」, 「X」)

在這種情況下,必須方程,你可以在C1 (1)C1 = < = ISBLANK(B1)>寫 (2)C1 =

溶液1將返回false,作爲單元填充有方程式 溶液2將返回真

相關問題