Ich habe es mal nachgestellt.
Zunächst mal geben wir dem PC ein "wenig" Futter - 10.000.000 Zufallszahlen per Formel
Hinterlegt sind folgende Makros:
Sub FillIt()
' 10.000.000 Zufallszahlen, dauert ein paar Sekunden!
Dim Start#
Cells.Clear
Start = Timer
Cells(1, 1).Resize(10000, 1000).Formula = "=Rand()"
Debug.Print "Fülldauer: " & Timer - Start & " Sekunden"
End Sub
Sub Val2Val()
Dim Start#
Start = Timer
With Range("A1").CurrentRegion
.Value = .Value
End With
Debug.Print "Wert gegen Wert: " & Timer - Start & " Sekunden"
End Sub
Sub Copy2Values()
Dim Start#
Start = Timer
With Range("A1").CurrentRegion
.Copy: .PasteSpecial xlPasteValues
End With
Debug.Print "Kopieren zu Wert: " & Timer - Start & " Sekunden"
With Application
.CutCopyMode = False
.Goto Cells(1)
End With
End Sub
Gestartet wird dann folgendes Makro:
Sub LetsDoIt()
FillIt
Val2Val
FillIt
Copy2Values
End Sub
Ergibt in meinem Direktfenster:
Code:
Fülldauer: 5,5703125 Sekunden
Wert gegen Wert: 15,55859375 Sekunden
Fülldauer: 5,4921875 Sekunden
Kopieren zu Wert: 2,16796875 Sekunden
Die .PasteSpecial-Methode ist folglich 7,18-mal schneller …
(hat mich mein Gedächtnis doch ein wenig getrogen)
Mögliche Erklärung:
Die Zelleigenschaften liegen ja schon gespeichert vor.
Ein .Copy hat folglich keine Rechenarbeit.
Mittels .Value muss aber erst diese spezielle Eigenschaft ausgelesen werden.