Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
352to356
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
352to356
352to356
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro dauert sehr lange

Makro dauert sehr lange
25.12.2003 20:20:46
Uwe
Hallo Zusammen
und ein Frohes Weihnachtsfest wünsche ich.

Ich habe hier per VBA ein Makro versucht zu entwerfen.
Die Auswertungen erfolgen richtig. Leider läuft es in
der Form so ca. 15 Minuten. Was aus meiner Sicht sehr
lang erscheint, oder????

Würde mich riesig freuen, wenn mir jemand einen anderen
Vorschlag machen könnte, wie ich dieses Makro beschleunige.

Außerdem muss ich dieses Makro auf mehrere Tabellen erweitern.
Hier bräuchte ich auf jeden Fall viel Hilfe.

Das Makro soll folgendes bewirken:

In einer Tabelle sind alle Bruttolohnarten von allen Mitarbeitern
von mehreren Monaten oder Jahren importiert worden. Diese muss
ich nun sortieren und anschließend pro Lohnart und pro Mitarbeiter
summieren.

Ich hoffe ich konnte mich verständlich ausdrücken und würde mich sehr
über eure Hilfe freuen.

Leider ist es nicht möglich diese Tabellen zur Verfügung zu stellen.
Datenschutz...

Bis bald

Uwe

Hier das Makro:

Dim summe As Single, bereich As range, zelle As range, wsszelle, j As Date

j = Now
n = 6 'Zeilenzähler für Pers-Nr. in SozialplanSumme Tabelle
d = 3 'Spaltenzähler für LOA
summe = 0
Set wss = ThisWorkbook.Worksheets("SozialplanSumme")
Set w022 = ThisWorkbook.Worksheets("Mandant022")

'Set bereich = w022.range("A1:A5000")
wsszelle = wss.UsedRange.Rows.Count
wsszelle = wsszelle + 2
wssspalte = wss.UsedRange.Columns.Count
wssspalte = wssspalte + 2
Set bereich = w022.range("A1: A5000")
Do Until d = wssspalte
Do Until n = wsszelle
For Each zelle In bereich
If zelle.Value = wss.range("A" & n).Value And _
zelle.Offset(0, 9) = wss.Cells(2, d) Then
summe = summe + zelle.Offset(0, 11).Value
Else
End If
Next zelle
wss.Cells(n, d) = summe
n = n + 1
summe = 0
Loop
d = d + 1
n = 6
Loop
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Debug.Print Format(Now - j, "hh:mm:ss")
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro dauert sehr lange
25.12.2003 21:28:35
DieterB
Hallo Uwe,

wenn ich es richtig sehe, sind das viele, viele daten.
Wenn Du für mehrere Mitarbeiter und mehrere Jahre eine Tabelle auswertest,
monatsweise, dann braucht das seine Zeit.
Je mehr Daten du hast, desto länger dauert das.
ich denke 15 min ist recht realistisch.

Beispiel: 1Ma = 12 Monate bei 1 Jahr Betriebszugehörigkeit.
Jett hast Du aber 10 MA, jeder ist 3 Jahre dabei = 360 Monate, die ausgewerte werden wollen.

Gruß

DieterB
Keine Lösung,... aber
25.12.2003 21:57:44
Ramses
Hallo

Ich weiss nicht wie viele Spalten du tatsächlich prüfen musst

wssspalte = wss.UsedRange.Columns.Count

Aber aus der Anweisung

summe + zelle.Offset(0, 11).Value

wird ersichtlich, dass es mindestens 11 Spalten sind.
In deinem "Set bereich = w022.range("A1: A5000")" wird ersichtlich dass es mindestens 5000 Zeilen sind.
Das macht nach Adam Zwerg und Eva Riese mal mindestens 55'000 Zellen die geprüft werden "If ... And..."
Das braucht Zeit.
Wenn du nur einige wenige Spalten hast, die du prüfen musst, würde ich auf die äussere Schleife verzichten.

Alternativ würde ich mal die Funktion "SUMMENPRODUKT()" ins Auge fassen oder in die entsprechende Zelle mit dem Makro einfach eine WENN-Formel einfügen lassen.

Gruss Rainer
Anzeige
AW: Keine Lösung,... aber
26.12.2003 14:56:19
Uwe
Hallo Zusammen und vielen Dank für eure Antworten.

Hm, wenn das so ist, dann muss ich mir die Zeit für die
Berechnung wohl nehmen. Auf jeden fall besser, als
Stundenlang es selbst zu erfassen. Grins.

Den angesprochenen Range bereich (A1:A5000) hatte ich
versucht auf das tatsächle Zeilenende zu setzen,
funktionierte aber nicht. Hab ich auch nicht verstanden.

Wäre nur noch klasse, wenn mir jemand helfen könnte,
dieses Makro über mehrere Tabellen laufen zu lassen.
Habe hiermit große Schwierigkeiten.

Vielen Dank noch mal und einen schönen Feiertag

Viele Grüße

Uwe
Anzeige
AW: Makro dauert sehr lange
26.12.2003 22:39:46
Reinhard
Hi Uwe,
hebe es nicht getestet, aber propier doch mal

Sub uwe()
Dim summe As Single
Dim wssZeile As Integer
Dim wssSpalte As Integer
Dim j As Date
Dim n As Integer
Dim d As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
j = Now
summe = 0
Set wss = ThisWorkbook.Worksheets("SozialplanSumme")
Set w022 = ThisWorkbook.Worksheets("Mandant022")
wssZeile = wss.Range("A65536").End(xlUp).Row + 2
wssSpalte = wss.Range("IV1").End(xlLeft).Column + 2
For d = 3 To wssSpalte 'Zeilenzähler für Pers-Nr. in SozialplanSumme Tabelle
For n = 6 To wssZeile 'Spaltenzähler für LOA
If w022.Cells(n, d).Value = wss.Cells(n, 1).Value And _
w022.Cells(n, d + 9) = wss.Cells(2, d) Then _
summe = summe + w022.Cells(n, d + 11).Value
wss.Cells(n, d) = summe
summe = 0
Next n
Next d
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Debug.Print Format(Now - j, "hh:mm:ss")
End Sub

Gruß
Reinhard
Anzeige
Hallo Reinhard
26.12.2003 23:11:08
Uwe
Hallo Zusammen,
hallo Reinhard,

Find ich super, das Du Dich damit beschäftigt hast.
Habe gerade Dein Makro getestet, aber leider erfolgt keine Berechnung.
Leider bis jetzt auch noch nicht das Problem erkannt.

Viele Grüße
Uwe
AW: Hallo Reinhard
27.12.2003 14:27:22
Reinhard
Hallo Uwe,
dann probier mal dieses, da wird die Berechnung erzwungen durch calculate:

Sub uwe()
Dim summe As Single
Dim wssZeile As Integer
Dim wssSpalte As Integer
Dim j As Date
Dim n As Integer
Dim d As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
j = Now
summe = 0
Set wss = ThisWorkbook.Worksheets("SozialplanSumme")
Set w022 = ThisWorkbook.Worksheets("Mandant022")
wssZeile = wss.Range("A65536").End(xlUp).Row + 2
wssSpalte = wss.Range("IV1").End(xlLeft).Column + 2
For d = 3 To wssSpalte 'Zeilenzähler für Pers-Nr. in SozialplanSumme Tabelle
For n = 6 To wssZeile 'Spaltenzähler für LOA
If w022.Cells(n, d).Value = wss.Cells(n, 1).Value And _
w022.Cells(n, d + 9) = wss.Cells(2, d) Then _
summe = summe + w022.Cells(n, d + 11).Value
wss.Cells(n, d) = summe
summe = 0
Next n
Next d
ActiveSheet.Calculate
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
Debug.Print Format(Now - j, "hh:mm:ss")
End Sub

Anzeige
Vielen Dank Reinhard
28.12.2003 00:55:55
Uwe
und noch einen guten Rutsch ins neue Jahr.

Viele Grüße Uwe

53 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige