Microsoft Excel

Herbers Excel/VBA-Archiv

Geschwindigkeitsoptimierung bei Copy/Paste



Excel-Version: 8.0 (Office 97)

Betrifft: Geschwindigkeitsoptimierung bei Copy/Paste
von: MArkus
Geschrieben am: 28.05.2002 - 14:53:31

Hi EXCEL Gemeinde,
habe Dateien mit einigen 1000 Wertepaaren umzukopieren..
In den Spalten B und C steht jeweils der Reihen/Spalten-Index wohin der zugeh. Wert in Spalte E in ein neues Blatt kopiert werden soll
Bsp.:

MS Excel von MArkus
 BCDE
12688.48E+048
22788.50E+049

->Wert 8 nach "Scheibe" cells(26,8)
->Wert 9 nach "Scheibe" cells(27,8)

Meine Lsg. funktioniert zwar, ist aber quälend langsam :-((


Sub scheibe()
Worksheets(1).Activate
name = ActiveSheet.name
imax = ActiveSheet.UsedRange.Rows.Count

Worksheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.name = "Scheibe"

For i = 20 To imax  '20 Zeilen Header
    Sheets(name).Select
        x = Range("B" & i).Value
        y = Range("C" & i).Value
        Range("E" & i).Copy
    Sheets("scheibe").Select
    Cells(x, y).Select
    ActiveSheet.Paste
Next i
Cells.Select
 selection.ColumnWidth = 2
 ActiveWindow.Zoom = 50
 Range("A1").Select
End Sub


Geht das nicht schneller???
Danke
MArkus












  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: Timo
Geschrieben am: 28.05.2002 - 15:05:45

Hi!

Versuche mal am Anfang
Application.Screenupdating = False und am Ende
Application.Screenupdating = True
Wirkt manchmal wahre Wunder!

Gruss
Timo


  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: MArkus
Geschrieben am: 28.05.2002 - 15:13:12

Hi Timo,
hab`ich auch schon probiert.... bringt aber nichts, das muß irgendwie anders programmiert werden.....

Gruß
MArkus


  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: Timo
Geschrieben am: 28.05.2002 - 15:39:41

Hmm, eventuell mit Arrays?

Sub scheibe()
Worksheets(1).Activate

Dim Daten() as Single

name = ActiveSheet.name
imax = ActiveSheet.UsedRange.Rows.Count
Worksheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.name = "Scheibe"

ReDim Daten(1 to imax-20, 1 to 3)

For i = 20 To imax  '20 Zeilen Header
    Sheets(name).Select
        Daten(i,1) = Range("B" & i).Value
        Daten(i,2) = Range("C" & i).Value
        Daten(i,3) = Range("E" & i).Value
Next i
    Sheets("scheibe").Select

For i = 1 to UBound(Daten)
    Cells(Daten(i,1), Daten(i,2)).Value = Daten(i,3)
Next i

Cells.Select
 selection.ColumnWidth = 2
 ActiveWindow.Zoom = 50
 Range("A1").Select
End Sub

Gruss
TImo

  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: Martin Beck
Geschrieben am: 28.05.2002 - 16:00:59

Hallo Markus,

nimm mal statt Deiner For-Next-Schleife folgendes:


Sheets(Name).Select
For i = 20 To imax  '20 Zeilen Header
Cells(i, 5).Copy Destination:=Sheets("scheibe").Cells(Cells(i, 2), Cells(i, 3))
Next i
End Sub

Setze außerdem am Codeanfang

Application.ScreenUpdating = False

Folgt die Liste der Zeilen und Spaltennummern in Spalte B und C einem System? Wenn ja, welchem? Evtl. läßt sich in Kenntnis eines sochen Systems der Code noch tunen.

Gruß
Martin Beck

  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: MArkus
Geschrieben am: 28.05.2002 - 16:13:07

Hi Timo,
das scheint mir jetzt ein ganz klein wenig schneller zu sein.
Hat aber einen Nachteil: In Spalte E stehen nicht nur Zahlen sondern auch einige Sonderzeichen( @,+,- ; sorry hätt` ich gleich sagen sollen) die deine Routine mit einer Null kopiert.

MS Excel von MArkus an Timo
 BCDE
12489.90E+99@
22589.90E+99@
33088.58E+048
43189.90E+37+
53488.59E+041
63588.64E+040
73689.90E+37+

Nach dieser Routine läuft aber eine bedingte Formatierung der kopierten Zellen, in denen abhängig von dem kopierten wert(0 bis 9) die Zellfarbe eingestellt wird.
Die zusätzlichen 0`er stören daher ungemein.....

Trotzdem schon mal Danke..

Gruß
MArkus

  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: MArkus
Geschrieben am: 28.05.2002 - 16:34:31

Hi Martin,
super!!!! das geht jetzt schnell genug. Danke.
Das System ist ein Kreis der mit lauter kleinen Quadraten ausgefüllt ist.
Jedes quadrat entspricht entweder einem Klassenwert (0 bis 9)
einem "ZU HOCH" bzw "ZU NIEDRIG" tag (+ oder -)
oder einem "NICHT GEMESSEN" Tag (@).
Die 10 Klassen werden noch farblich unterschiedlich formatiert, so daß am Ende eine 2-dimensionale Klassenverteilung innerhalb des Kreises sichtbar wird. (für die Technologen: Wafermapping)

Gruß
Markus

  

Re: Geschwindigkeitsoptimierung bei Copy/Paste
von: Timo
Geschrieben am: 28.05.2002 - 17:03:31

Versuch das hier:

Dim Daten() as Variant

Dann klappts auch mit den Sonderzeichen. Melde dich ansonsten morgen nochmal, wenn mir noch was einfällt, schreibe ich dir!

Timo