Se si esegue il seguente codiceQual è la differenza tra .Value = "" e .ClearContents?
Sub Test_1()
Cells(1, 1).ClearContents
Cells(2, 1).Value = ""
End Sub
Quando controllo cellule (1, 1) e cellule (2, 1) usando la formula ISBLANK()
entrambi i risultati tornare TRUE. Quindi mi chiedo:
Qual è la differenza tra
Cells(,).Value = ""
eCells(,).ClearContents
?
Sono essenzialmente uguali?
Se quindi eseguire il seguente codice per verificare la differenza di tempo tra i metodi:
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
ottengo il seguente output per il runtime sulla mia macchina
.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
Sulla base di questi risultati, vediamo che il metodo .Value = ""
è più veloce di .ClearContents
in media. È vero in generale? Perchè così?
credo hai centrato l'unghia sulla testa con i tuoi test di cronometraggio nts è utile se c'è una formattazione numerica che si desidera conservare, che può essere scritta dalla stringa vuota. Ci potrebbe essere più sfumatura di quella, però, ma se così fosse, non ne sono a conoscenza – RGA
'.Value =" "' sta semplicemente inserendo una stringa di lunghezza zero nella cella, quindi stai solo scrivendo un nuovo valore (_non è tecnicamente vuoto ..._) '.ClearContents' sta rimuovendo il' .Value 'della cella che immagino abbia un po' più di overhead in termini di gestione della memoria. –
@MacroMan Usando l'analogia matematica, stai implicando che '.Value =" "' è uguale a 0 e '.ClearContents' è uguale a un set vuoto? Comunque, grazie RGA per aver modificato la mia domanda. –