Anzeige
Archiv - Navigation
1068to1072
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel wird langsam

Excel wird langsam
29.04.2009 10:05:15
Felix
Guten Morgen!
Ich habe aus anderen Makros ein Makro zusammen kopiert, das im Prinzip macht was ich will. Nur leider ist seitdem das Arbeiten in dem Excel sheet, in dem das Makro ist, unglaublich langsam. Alle anderen sheets (über 40 in dem workbook) laufen einwandfrei, auch das Laden der Datei geht zügig.
Es geht mir in diesem Fall nicht um die Laufzeit des Markos, sondern darum, dass Excel selbst so langsam ist (kopieren/ verschieben von Zellen etc.)
Was kann ich ändern an diesem Code bzw woran könnte es noch liegen? Vielen Dank für die Hilfe

Sub heli()
Worksheets("data").Range("a1:a850").Copy Destination:= _
Worksheets("heli").Range("c4:C853")
Worksheets("data").Range("b1:b850").Copy Destination:= _
Worksheets("heli").Range("d4:d853")
Worksheets("data €").Range("b1:b850").Copy Destination:= _
Worksheets("heli").Range("k4:k853")
'copy current percentages
Select Case Sheets("heli").Cells(2, 17).Value
Case "01/01/2009"
Worksheets("data").Range("c1:c850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/02/2009"
Worksheets("data").Range("d1:d850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/03/2009"
Worksheets("data").Range("e1:e850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/04/2009"
Worksheets("data").Range("f1:f850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/05/2009"
Worksheets("data").Range("g1:g850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/06/2009"
Worksheets("data").Range("h1:h850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/07/2009"
Worksheets("data").Range("i1:i850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/08/2009"
Worksheets("data").Range("j1:j850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/09/2009"
Worksheets("data").Range("k1:k850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/10/2009"
Worksheets("data").Range("l1:l850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/11/2009"
Worksheets("data").Range("m1:m850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/12/2009"
Worksheets("data").Range("n1:n850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
End Select
Select Case Sheets("heli").Cells(2, 16).Value
Case "01/01/2009"
Worksheets("data").Range("c1:c850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/02/2009"
Worksheets("data").Range("d1:d850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/03/2009"
Worksheets("data").Range("e1:e850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/04/2009"
Worksheets("data").Range("f1:f850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/05/2009"
Worksheets("data").Range("g1:g850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/06/2009"
Worksheets("data").Range("h1:h850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/07/2009"
Worksheets("data").Range("i1:i850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/08/2009"
Worksheets("data").Range("j1:j850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/09/2009"
Worksheets("data").Range("k1:k850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/10/2009"
Worksheets("data").Range("l1:l850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/11/2009"
Worksheets("data").Range("m1:m850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/12/2009"
Worksheets("data").Range("n1:n850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
End Select
Select Case Sheets("heli").Cells(2, 17).Value
Case "01/01/2009"
Worksheets("data €").Cells(i, 3).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/02/2009"
Worksheets("data €").Cells(i, 4).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/03/2009"
Worksheets("data €").Cells(i, 5).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/04/2009"
Worksheets("data €").Cells(i, 6).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/05/2009"
Worksheets("data €").Cells(i, 7).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/06/2009"
Worksheets("data €").Cells(i, 8).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/07/2009"
Worksheets("data €").Cells(i, 9).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/08/2009"
Worksheets("data €").Cells(i, 10).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/09/2009"
Worksheets("data €").Cells(i, 11).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/10/2009"
Worksheets("data €").Cells(i, 12).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/11/2009"
Worksheets("data €").Cells(i, 13).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
Case "01/12/2009"
Worksheets("data €").Cells(i, 14).Copy Destination:= _
Worksheets("heli").Cells(i + 3, 12)
End Select
MsgBox ("copied")
End Sub


6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel wird langsam
29.04.2009 10:21:36
Felix
sorry, habe den alten code einkopiert. Die letzte select case reihe ist keine schleife mehr, sondern auch nur eine simple range kopiererei ohne schleife. Das ist der richtige code:

Sub heli()
Worksheets("data").Range("a1:a850").Copy Destination:= _
Worksheets("heli").Range("c4:C853")
Worksheets("data").Range("b1:b850").Copy Destination:= _
Worksheets("heli").Range("d4:d853")
Worksheets("data €").Range("b1:b850").Copy Destination:= _
Worksheets("heli").Range("k4:k853")
Select Case Sheets("heli").Cells(2, 17).Value
Case "01/01/2009"
Worksheets("data").Range("c1:c850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/02/2009"
Worksheets("data").Range("d1:d850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/03/2009"
Worksheets("data").Range("e1:e850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/04/2009"
Worksheets("data").Range("f1:f850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/05/2009"
Worksheets("data").Range("g1:g850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/06/2009"
Worksheets("data").Range("h1:h850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/07/2009"
Worksheets("data").Range("i1:i850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/08/2009"
Worksheets("data").Range("j1:j850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/09/2009"
Worksheets("data").Range("k1:k850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/10/2009"
Worksheets("data").Range("l1:l850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/11/2009"
Worksheets("data").Range("m1:m850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
Case "01/12/2009"
Worksheets("data").Range("n1:n850").Copy Destination:= _
Worksheets("heli").Range("f4:f853")
End Select
Select Case Sheets("heli").Cells(2, 16).Value
Case "01/01/2009"
Worksheets("data").Range("c1:c850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/02/2009"
Worksheets("data").Range("d1:d850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/03/2009"
Worksheets("data").Range("e1:e850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/04/2009"
Worksheets("data").Range("f1:f850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/05/2009"
Worksheets("data").Range("g1:g850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/06/2009"
Worksheets("data").Range("h1:h850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/07/2009"
Worksheets("data").Range("i1:i850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/08/2009"
Worksheets("data").Range("j1:j850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/09/2009"
Worksheets("data").Range("k1:k850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/10/2009"
Worksheets("data").Range("l1:l850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/11/2009"
Worksheets("data").Range("m1:m850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
Case "01/12/2009"
Worksheets("data").Range("n1:n850").Copy Destination:= _
Worksheets("heli").Range("e4:e853")
End Select
Select Case Sheets("heli").Cells(2, 17).Value
Case "01/01/2009"
Worksheets("data €").Range("c1:c850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/02/2009"
Worksheets("data €").Range("d1:d850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/03/2009"
Worksheets("data €").Range("e1:e850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/04/2009"
Worksheets("data €").Range("f1:f850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/05/2009"
Worksheets("data €").Range("g1:g850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/06/2009"
Worksheets("data €").Range("h1:h850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/07/2009"
Worksheets("data €").Range("i1:i850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/08/2009"
Worksheets("data €").Range("j1:j850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/09/2009"
Worksheets("data €").Range("k1:k850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/10/2009"
Worksheets("data €").Range("l1:l850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/11/2009"
Worksheets("data €").Range("m1:m850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
Case "01/12/2009"
Worksheets("data €").Range("n1:n850").Copy Destination:= _
Worksheets("heli").Range("l4:l853")
End Select
MsgBox ("copied")
End Sub


Anzeige
keine richtige Lösung...
29.04.2009 10:34:19
Tino
Hallo,
so richtig habe ich keine Lösung, weil Du ja beim kopieren eigentlich keine Zwischenablage verwendest.
Versuche es mal dennoch und schreibe vor die Msgbox diese Zeile.
Application.CutCopyMode = False
Wie gesagt vorstellen kann ich es mir nicht, dass es daran liegt.
Eher habe ich die Vermutung es liegt an Deiner Tabelle.
Was sind dies für Zellen die Du da kopierst, enthalten diese eventuell viele Formeln oder hat Deine Tabelle viele Formeln die lang zum berechnen brauchen (Matrixformeln)
Gruß Tino
AW: keine richtige Lösung...
29.04.2009 10:59:43
Felix
Danke Tino schon mal für den Versuch.
Zur Verdeutlichung wollte ich dir eben den Excel file schicken und habe dafür alle für dich unnötigen sheets heraus gelöscht. Dabei bin ich wohl auf den Fehler gekommen, denn ohne die anderen Sheets läuft alles in gewohnter Geschwindigkeit.
Somit liegt es in der Tat nicht am Makro, sondern daran, dass die Daten die das Makro in das andere Sheet kopiert alle nicht "frei" sind. Die 40 anderen Sheets greifen auf die Daten zu, die das Makro kopiert. Dabei werden wohl die Beziehungen/ Referenzen der anderen sheets mitkopiert.
Gibt es eine möglichkeit wie bei "paste special" nur die nackten Werte, ohne Beziehungen zu kopieren und das ins Makro einzubauen?
Anzeige
AW: keine richtige Lösung...
29.04.2009 11:13:34
Tino
Hallo,
dies könntest Du so machen.
zwei Beispiele:
So

Worksheets("heli").Range("f4:f853").Value = Worksheets("data").Range("c1:c850").Value


Oder


Worksheets("data").Range("c1:c850").Copy
Worksheets("heli"). Range("f4:f853").PasteSpecial xlPasteValues


Und am Schluss vor der Msgbox


Application.CutCopyMode = False


Gruß Tino

AW: keine richtige Lösung...
29.04.2009 13:30:11
Felix
Vielen Dank!
Zur Info: Option 1 funktionierte bei mir leider nicht. Option 2 dafür perfekt.
Anzeige
AW: Überflüssiges SELECT CASE
30.04.2009 22:59:08
Daniel
Hi
im Prinzip kannst du doch die Spalte, die kopiert werden soll, aus dem Datumwert errechnen.
der Rest ist ja immer gleich. Damit sparst du dir die aufwendige SELECT-Prüfung und das ganze wird kürzer und verständlicher
z.B. so

dim Spalte as Long
Spalte = Clng(Mid$(Sheets("heli").Cells(2, 17),4,4)) + 2
Worksheets("data").Cells(1, Spalte).Resize(850,1).Copy
Worksheets("heli").Range("f4").Pastespecial xlPasteValues


würde den ganzen ersten SELECT-CASE-Block ersetzen.
Auszerdem reicht es beim Kopieren vom Zielbereich immer nur die erste Zelle anzugeben.
Wie gross das ganze wird, weiß Excel ja aus den kopierten Werten.
Gruß, Daniel
ps. wenn das Datum in der Zelle ein echts Datum ist, dann kann man die Spalte auch so ermiitteln:
Spalte = Month(Sheets("heli").Cells(2, 17))

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige