Clever-Excel-Forum

Normale Version: [Excel] Neue Tastenkombination für "Werte einfügen"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin

https://insider.office.com/en-us/blog/ne...-shortcuts
https://www.youtube.com/watch?v=8Qn1mkIJ1Sc

Zitat:Now you can simply press Ctrl+Shift+V!
Dass ich das noch erleben darf.  22
Genau diese Kombination habe ich schon mal vorgeschlagen!
Moin!
Prinzipiell sehr gut und seit Jahrzehnten überfällig.
Dürfte auch für die meisten Anwender problemlos sein.
Hat aber den nicht unerheblichen Nachteil, dass es mit Spill-Funktionen nur dann zurechtkommt, wenn vorher der SpillingToRange markiert wird.

Beispiel:
In A1 steht =SEQUENZ(5)
Kopiere ich A1
und füge den Wert mittels Strg+Umschalt+v in A1 ein, erhalte ich #ÜBERLAUF!
markiere ich C1, erhalte ich mit Strg+Umschalt+v nur die 1 (aus A1), aber nicht den SpillingToRange
Man muss also vorher (mindestens) den Range A1:A5 markieren, damit das klappt.

Da ich recht häufig Beispieldatensätze mittels Spill fülle und sie danach durch den Wert ersetze, wird der Shortcut Strg+Umschalt+w (w wie Werte) aus meiner Personal.xlsb noch nicht arbeitslos:
Sub FormelInWert()
'Shortcut Strg+Umschalt+W 
Dim x As Range
If TypeName(Selection) = "Range" Then
  With Application
    .ScreenUpdating = False
    For Each x In .Selection.Areas
        If x.HasSpill Then
          With x.SpillParent.SpillingToRange
            .Copy: .PasteSpecial xlPasteValues
          End With
        Else
          x.Copy: x.PasteSpecial xlPasteValues
        End If
    Next
    .CutCopyMode = False
    .Goto ActiveCell
  End With
End If
End Sub

Gruß Ralf
Das Makro müsste doch eigentlich auch mit einfacher Zuweisung von .Value anstelle eines .Copy gehen?

Hajo: "... damit der Cursor nicht wie ein Hund gassi gehen muss." ;) (stimmt hier nicht ganz)

Es bliebe dann nur bei Verwendung von .Selection.
(29.10.2022, 08:36)LCohen schrieb: [ -> ]Das Makro müsste doch eigentlich auch mit einfacher Zuweisung von .Value anstelle eines .Copy gehen?

Ja, sicher datt!
"Sauberer" ist imo aber .Copy .PasteSpecial
Ich habe vor Jahren mal bewiesen, dass letzteres "erheblich" schneller arbeitet als .Value = .Value
Erheblich heißt: grob Faktor 3
Aber Du hast natürlich Recht!
Ob das Makro nun 1E-10 oder 3E-10 benötigt, ist recht egal. Wink
Verglichen habe ich das nie, aber bei .Copy werden doch alle anderen Eigenschaften auf das Ziel mit übertragen (die es hier ja schon hat).

Dann müsste das bloße Zuweisen von .Value speicherintern ungünstiger ablaufen. Z.B. könnte nur .Copy intern tatsächlich einen Adress-Block zuweisen, wenn Du recht hast. .Value würde dann z.B. über eine Schleife funktionieren. Alles unterhalb der User-Sprachebene von VBA.
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.
Übrigens recht interessant:
Bei obiger Datenbasis dauert ein manuelles Strg+Umschalt+v handgestoppt bei mir fast vier Sekunden, also länger als die .PasteSpecial-Methode
(29.10.2022, 10:28)RPP63 schrieb: [ -> ]Die .PasteSpecial-Methode ist folglich 7,18-mal schneller …
(hat mich mein Gedächtnis doch ein wenig getrogen)

Kann ich bestätigen:
Code:
Fülldauer: 3,25 Sekunden
Wert gegen Wert: 11,07421875 Sekunden
Fülldauer: 3,10546875 Sekunden
Kopieren zu Wert: 1,55859375 Sekunden

War das nicht mal eine Diskussion im OE-Forum? Für mich war es auch überraschend, dass .Value = .Value soviel langsamer ist.

Gruß Uwe
Hallo Uwe,

kann ich bestätigen. Und noch mehr ...
online-excel.de - Formeln in Werte