Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
272to276
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
272to276
272to276
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ich möchte schon wieder mehr Tempo

Ich möchte schon wieder mehr Tempo
28.06.2003 20:31:04
Mario
Hello again,
folgedes Makro liest Werte aus den Tabelle 3 bis vorhandenen Tabelle ein und trägt diese werte in der Tabelle übersicht ein.Auf meinem Rechner braucht benötigt dieses Makro ca. 5 bis 6 Sek.
Wer hilft mir den Ablauf zu beschleunigen ???
VIELEN DANK
Sub Makro2()
Dim iCounter As Integer, icolumns As Integer
Dim t As Integer
Dim x As Integer
Application.Cursor = xlWait 'Sanduhr einschalten
On Error GoTo errorhandler
Worksheets("Übersicht").Activate
Application.ScreenUpdating = False
Range("A3:AA150").Delete
Application.ScreenUpdating = False
For iCounter = Sheets(3).Index To Worksheets.Count
icolumns = (icolumns + 1)
For t = 15 To 120
t = (t + 0)
Cells(3, icolumns + 1) = Worksheets(iCounter).Range("B7").Value
Cells(t - 11, 1) = Worksheets(iCounter).Cells(t + 1, 15).Value
Cells(t - 11, icolumns + 1) = Worksheets(iCounter).Cells(t + 1, 23).Value
Cells(t - 11, icolumns + 1).NumberFormat = "0.00_);[Red]-0.00"
Cells(t - 11, icolumns).NumberFormat = "0.00_);[Red]-0.00"
With Cells(3, icolumns).Font
.Bold = True
.Underline = xlUnderlineStyleSingle
.ColorIndex = 1
End With
Next t
Next iCounter

'ausrechnen
Application.ScreenUpdating = False
icolumns = Cells(x + 4, 255).End(xlToLeft).Column + 1
For x = 4 To Cells(Rows.Count, 1).End(xlUp).Row
Cells(x, icolumns).FormulaR1C1 = "=SUM(RC1:RC" & icolumns - 1 & ")"
Cells(x, icolumns + 1).FormulaR1C1 = "=average(RC1:RC" & icolumns - 1 & ")"
Cells(x, icolumns + 2).FormulaR1C1 = "=max(RC1:RC" & icolumns - 1 & ")"
Cells(x, icolumns + 3).FormulaR1C1 = "=min(RC1:RC" & icolumns - 1 & ")"
Cells(3, icolumns).FormulaR1C1 = "=""Jahrestotal"""
Cells(3, icolumns + 1).FormulaR1C1 = "=""Durchschnitt"""
Cells(3, icolumns + 2).FormulaR1C1 = "=""Max."""
Cells(3, icolumns + 3).FormulaR1C1 = "=""Min."""
With Cells(x, icolumns).Font
.Bold = True
'.Underline = xlUnderlineStyleSingleAccounting
.ColorIndex = 1
End With
With Cells(x, icolumns + 1).Font
.Bold = True
'.Underline = xlUnderlineStyleSingleAccounting
.ColorIndex = 8
End With
With Cells(x, icolumns + 2).Font
.Bold = True
'.Underline = xlUnderlineStyleSingleAccounting
.ColorIndex = 4
End With
With Cells(x, icolumns + 3).Font
.Bold = True
'.Underline = xlUnderlineStyleSingleAccounting
.ColorIndex = 5
End With
Next x
With Range("A3:AA170").Font
.Size = 12
End With
Range("A:A").Font.Bold = True
Range("B4:AA4").EntireColumn.AutoFit
With Range("B4:AA170")
.RowHeight = 30
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
End With
With Range("A:A")
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
End With
Application.Cursor = xlDefault 'Sanduhr ausschalten

errorhandler:
Exit Sub
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ca 2/10 sekunden bei 12
29.06.2003 11:05:38
Peter Haserodt
Hi,
so als Workaround zum testen, da ich deinen sonstigen Code nicht ganz verstehe,
da Column 1 immer überschrieben wird.
Aber das sollte schon genug Geschwindigkeitsbeispiel sein:
Dies liese sich noch mit xlcalculation und anderen Sachen vielleicht beschleunigen,
ist aber sicherlich nicht notwendig. Ob jetzt die Zuordnungen ganz stimmen weiss ich auch nicht, aber das soll dein Problem sein ;-)



... und hier der Code
29.06.2003 11:31:55
Peter Haserodt
Hi,
da anscheinend pures Html nicht mehr funktioniert so richtig,
wurde der Code verschluckt:
Hier als Klartext:
Public Sub Los()
Dim icounter As Integer, iLetzte As Long, it As Long
With Sheets("Übersicht")
.Cells.Clear
For icounter = Worksheets(3).Index To Worksheets.Count
.Range(.Cells(4, icounter), .Cells(119, icounter)).Value = _
Worksheets(icounter).Range(Worksheets(icounter).Cells(4, 23), Worksheets(icounter).Cells(119, 23)).Value
Next icounter
.Cells(4, icounter).Formula = "=Sum(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
.Cells(4, icounter + 1).Formula = "=Min(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
.Cells(4, icounter + 2).Formula = "=Max(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
.Cells(4, icounter + 3).Formula = "=Average(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
iLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range(.Cells(4, icounter), .Cells(4, icounter + 3)).AutoFill _
Destination:=.Range(.Cells(4, icounter), .Cells(iLetzte, icounter + 3)), Type:=xlFillDefault
.Range(.Cells(4, icounter), .Cells(iLetzte, icounter + 3)).NumberFormat = "0.00_);[Red]-0.00"
End With
End Sub

Anzeige
AW: ... und hier der Code
29.06.2003 16:43:40
Mario
Hallo,
Vielen dank für eure Tips,ihr habt mir wirchlich sehr geholfen.Darum nochmals vielen dank an alle Helfer es ist ja nich so selbsverstänlich.
Gruss Mario

... und hier der Code
29.06.2003 11:09:10
Peter Haserodt
Hi,
da anscheinend pures Html nicht mehr funktioniert so richtig,
wurde der Code verschluckt:
Hier als Klartext:
Public Sub Los()
Dim icounter As Integer, iLetzte As Long, it As Long
With Sheets("Übersicht")
.Cells.Clear
For icounter = Worksheets(3).Index To Worksheets.Count
.Range(.Cells(4, icounter), .Cells(119, icounter)).Value = _
Worksheets(icounter).Range(Worksheets(icounter).Cells(4, 23), Worksheets(icounter).Cells(119, 23)).Value
Next icounter
.Cells(4, icounter).Formula = "=Sum(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
.Cells(4, icounter + 1).Formula = "=Min(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
.Cells(4, icounter + 2).Formula = "=Max(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
.Cells(4, icounter + 3).Formula = "=Average(" & Range(.Cells(4, 3), .Cells(4, icounter - 1)).Address(0, 0) & ")"
iLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range(.Cells(4, icounter), .Cells(4, icounter + 3)).AutoFill _
Destination:=.Range(.Cells(4, icounter), .Cells(iLetzte, icounter + 3)), Type:=xlFillDefault
.Range(.Cells(4, icounter), .Cells(iLetzte, icounter + 3)).NumberFormat = "0.00_);[Red]-0.00"
End With
End Sub

Anzeige
AW: Ich möchte schon wieder mehr Tempo
28.06.2003 20:51:25
PeterW
Hallo Mario,
wenn man wüsste, um wie viele Blätter es sich handelt könnte man abschätzen, ob die Laufzeit wirklich zu lang ist.
Geh mal den Code durch und wirf alle überflüssigen Zeilen raus.
Application.ScreenUpdating = False
ist wirksam bis wieder auf True gesetzt.
Worksheets("Übersicht").Activate
statt Activate lieber referenzieren bzw. eine Objektvariable setzen.
t = (t + 0)
was ändert sich hier an t?
Cells(x, icolumns).FormulaR1C1 = "=SUM(RC1:RC" & icolumns - 1 & ")"
Cells(x, icolumns + 1).FormulaR1C1 = "=average(RC1:RC" & icolumns - 1 & ")"
Cells(x, icolumns + 2).FormulaR1C1 = "=max(RC1:RC" & icolumns - 1 & ")"
Cells(x, icolumns + 3).FormulaR1C1 = "=min(RC1:RC" & icolumns - 1 & ")"
Cells(3, icolumns).FormulaR1C1 = "=""Jahrestotal"""
Cells(3, icolumns + 1).FormulaR1C1 = "=""Durchschnitt"""
Cells(3, icolumns + 2).FormulaR1C1 = "=""Max."""
Cells(3, icolumns + 3).FormulaR1C1 = "=""Min."""
brauchst du hier wirklich die Formeln oder nur die Ergebnisse?
Gruß
Peter

Anzeige
AW: Ich möchte schon wieder mehr Tempo
28.06.2003 21:11:10
Mario
Vielen dank für eure Tips es hat den Ablauf nicht wesenlich beschleunigt übrigens es sind max. 12 Blätter a ca. 300 Werte auszulesen und dann in der Tabelle "ÜBERSICHT" einzutragen.
Für eure Vebesserungsvorschläge danke ich schon zum Voraus.
Nun muss ich mich verabschieden.Ich muss zur Arbeit(Nachtschicht),deshalb schaue ich erst Morgen wieder vorbei.
Gruss mario

AW: Ich möchte schon wieder mehr Tempo
28.06.2003 22:57:42
HerbertH
Hallo mario,
Mit 12 Blättern läuft es bei mir in 1,27 sec.

Gruß Herbert

AW: Ich möchte schon wieder mehr Tempo
28.06.2003 20:45:09
Knut
Da sind ein paar nutzlose Sachen drin, die aber den Code nicht
wesentlich behindern.
Du schaltest z.B. 3 mal ScreenUpdating aus aber nicht wieder ein.
Versuchs mal mit EnableEvents = false und Calculation = xlManual
aber nicht vergessen, wieder einzuschalten.
Knut

Anzeige
einzelne zeiten messen
28.06.2003 20:45:07
mischa richter
versuche doch bei den einzelnen Programmabschnitten die Laufzeit zu messen und stürze dich dann auf genau den abschnitt, der dir zu lange dauert - ok, ich hatte keine richtige lust, den langen code anzusehen. auf den ersten blick fallen mir aber die vielen formatierungsbestandteile auf, die dauern auch bei mir sehr lang.
mischa

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige