schnelle Möglichkeit, Formatierung in Excel zu kopieren

8

Ich habe zwei Bits Code. Zuerst eine Standard-Kopierpaste von Zelle A nach Zelle B

%Vor%

Ich kann fast dasselbe mit

machen %Vor%

Jetzt ist diese zweite Methode viel schneller und vermeidet das Kopieren in die Zwischenablage und das Einfügen. Es wird jedoch nicht wie bei der ersten Methode über die Formatierung kopiert. Die zweite Version kopiert fast 500 Zeilen, während die erste Methode ungefähr 5 Sekunden zu der Zeit hinzufügt. Und die endgültige Version könnte mehr als 5000 Zellen sein.

Also meine Frage kann die zweite Zeile geändert werden, um die Zellenformatierung (hauptsächlich Schriftfarbe) einzuschließen, während sie immer noch schnell bleibt.

Idealerweise würde ich gerne in der Lage sein, die Zellenwerte zusammen mit der Schriftformatierung in ein Array / eine Liste zu kopieren, damit ich sie weiter sortieren und bearbeiten kann, bevor ich sie wieder in das Arbeitsblatt "einfüge". p>

Also wäre meine ideale Lösung etwas wie

%Vor%

ist es möglich, RTF-Zeichenfolgen in VBA zu verwenden oder ist das nur in vb.net usw. möglich.

Antwort *

Nur um zu sehen, wie meine ursprüngliche Methode und neue Methode vergleichen, hier sind die Ergebnisse oder vorher und nach

Neuer Code = 65 ms

%Vor%

Alter Code = 1296 ms

%Vor%     
DevilWAH 23.12.2011, 14:27
quelle

5 Antworten

4

Für mich kann man nicht. Aber wenn das Ihren Anforderungen entspricht, können Sie die Formatierung beschleunigen und , indem Sie den gesamten Bereich auf einmal kopieren, anstatt zu loopen:

%Vor%

Übrigens können Sie eine benutzerdefinierte Bereichszeichenfolge wie Range("B2:B4, B6, B11:B18")

erstellen

Bearbeiten : Wenn Ihre Quelle "spärlich" ist, können Sie das Ziel nicht sofort nach Abschluss der Kopie formatieren?

    
Patrick Honorez 23.12.2011, 14:50
quelle
12

Sie hätten einfach Range("x1").value(11) verwenden können etwas wie unten:

%Vor%

Bereich hat die Standardeigenschaft "Value" plus Wert kann 3 optionale Orders 10,11,12 haben. 11 ist, was Sie brauchen, um sowohl Wert als auch Formate zu überarbeiten. Es verwendet keine Zwischenablage, also ist es schneller. - Durgesh

    
Durgesh 19.12.2014 07:52
quelle
3

Denken Sie daran, wenn Sie schreiben:

%Vor%

Du schreibst wirklich

%Vor%

Sie können auch Namen verwenden:

%Vor%

Aber Value ist nicht die einzige Eigenschaft von Range. Ich habe verwendet:

%Vor%

Ich bezweifle

%Vor%

würde funktionieren, aber ich würde

erwarten %Vor%

um zu arbeiten.

Ich weiß nicht, welche Formate du kopieren willst, also musst du es versuchen.

Ich muss jedoch hinzufügen, dass es beim Kopieren und Einfügen eines großen Bereichs nicht so viel langsamer ist als über ein Array, wie wir alle dachten.

Beitrag bearbeiten Informationen

Nachdem ich das oben Gesagte gepostet habe, versuchte ich es mit einem eigenen Rat. Meine Experimente mit dem Kopieren von Font.Color und Font.Bold in ein Array sind fehlgeschlagen.

Von den folgenden Anweisungen würde die zweite mit einem Typenkonflikt fehlschlagen:

%Vor%

ValueArray muss vom Typ variant sein. Ich habe sowohl Variante als auch Long nach ColourArray ohne Erfolg versucht.

Ich füllte ColourArray mit Werten und versuchte die folgende Aussage:

%Vor%

Der gesamte Bereich würde nach dem ersten Element von ColourArray eingefärbt und dann in Excel geloopt werden, was ungefähr 45% der Prozessorzeit in Anspruch nehmen würde, bis ich sie mit dem Task-Manager beendete.

Es gibt eine Zeitstrafe, die mit dem Wechsel zwischen Arbeitsblättern verbunden ist, aber neuere Fragen zur Makrodauer haben dazu geführt, dass jeder unsere Überzeugung überprüft hat, dass das Arbeiten über Arrays wesentlich schneller war.

Ich habe ein Experiment erstellt, das Ihre Anforderungen weitgehend widerspiegelt. Ich füllte Arbeitsblatt Time1 mit 5000 Zeilen von 20 Zellen, die selektiv formatiert wurden als: fett, kursiv, unterstrichen, tiefgestellt, umrandet, rot, grün, blau, braun, gelb und grau-80%.

Mit Version 1 habe ich alle sieben Zellen vom Arbeitsblatt "Time1" mit Kopie in das Arbeitsblatt "Time2" kopiert.

Mit Version 2 habe ich alle sieben Zellen vom Arbeitsblatt "Time1" in das Arbeitsblatt "Time2" kopiert, indem ich den Wert und die Farbe über ein Array kopiert habe.

Mit Version 3 habe ich alle sieben Zellen vom Arbeitsblatt "Time1" in das Arbeitsblatt "Time2" kopiert, indem ich die Formel und die Farbe über ein Array kopiert habe.

Version 1 benötigte durchschnittlich 12,43 Sekunden, Version 2 durchschnittlich 1,47 Sekunden, während Version 3 durchschnittlich 1,83 Sekunden benötigte. Version 1 kopierte Formeln und alle Formatierungen, Version 2 kopierte Werte und Farbe, während Version 3 Formeln und Farben kopierte. Bei den Versionen 1 und 2 könnten Sie beispielsweise fett und kursiv schreiben und haben noch etwas Zeit. Ich bin mir jedoch nicht sicher, ob es sich lohnt, den Fehler zu machen, denn das Kopieren von 21.300 Werten dauert nur 12 Sekunden.

** Code für Version 1 **

Ich glaube nicht, dass dieser Code etwas enthält, das einer Erklärung bedarf. Reagiere mit einem Kommentar, wenn ich falsch liege und ich werde es beheben.

%Vor%

** Code für Version 2 und 3 **

Die Benutzertypdefinition muss vor jedem Unterprogramm im Modul stehen. Der Code arbeitet über das Quellarbeitsblatt und kopiert Werte oder Formeln und Farben in das nächste Element des Arrays. Sobald die Auswahl abgeschlossen ist, kopiert sie die gesammelten Informationen in das Zielarbeitsblatt. Dadurch wird vermieden, dass mehr als unbedingt erforderlich zwischen Arbeitsblättern gewechselt wird.

%Vor%     
Tony Dallimore 25.12.2011 01:18
quelle
0

Verwenden Sie einfach die NumberFormat-Eigenschaft nach der Value-Eigenschaft: In diesem Beispiel werden die Bereiche durch die Variablen ColLetter und SheetRow definiert, die aus einer For-Next-Schleife mit der Ganzzahl i kommen, aber sie können natürlich auch normale definierte Bereiche sein.

TransferSheet.Range (ColLetter & amp; SheetRow). Value = Bereich (ColLetter & amp; i) .Wert TransferSheet.Range (ColLetter & amp; SheetRow). NumberFormat = Bereich (ColLetter & amp; i). NumberFormat

    
Derek Sturdy 02.07.2015 11:16
quelle
-2

Tut es:

%Vor%

... arbeiten? (Ich habe Excel nicht vor mir, kann also nicht testen.)

    
Xophmeister 23.12.2011 14:47
quelle

Tags und Links