Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[Excel] Neue Tastenkombination für "Werte einfügen"
#1
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
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • schauan
Antworten Top
#2
Genau diese Kombination habe ich schon mal vorgeschlagen!
Antworten Top
#3
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 2 Nutzer sagen Danke an RPP63 für diesen Beitrag:
  • schauan, LCohen
Antworten Top
#4
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.
Antworten Top
#5
(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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
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.
Antworten Top
#7
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.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#8
Ü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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
(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
Antworten Top
#10
Hallo Uwe,

kann ich bestätigen. Und noch mehr ...
online-excel.de - Formeln in Werte
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Kuwer
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste