Anzeige
Archiv - Navigation
1880to1884
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
Do-Loop Schleife läuft ewig
09.05.2022 10:44:46
weitschuetz
Hallo zusammen,
ich habe ein Marko geschrieben, welches mit Hilfe einer DoLoop Schleife in der Datei 1 schaut, ob in Zelle "5+p; 1" ein bestimmter Wert gleich ist mit dem Wert aus Datei 2 und dann einen definierten Bereich von 2 nach 1 kopiert. Ist die Bedingung nicht erfüllt, erhöht sich p jedes mal um 136. Als Abbruchkriterium habe ich definiert "Do Until p > 300". Soweit funktioniert alles gut und ist schnell fertig. Allerdings wen ich das Abbruchkriterium auf 900 erhöhe, dann läuft das Makro ewig. Hierbei sollen die Daten auch nicht gleich in den ersten Bereich kopiert werden, sondern erst weiter unten. Was sehr schlecht ist, da das fertige Makro dann in der endgültigen Version bis 23000 laufen muss. Das ist eine Auswertedatei, an dem jeden Tag neue Messwerte unter den alten eingetragen werden müssen. Dies geschieht in fest definierten Zellen, da mit diesen Werten dann wieder weiter gerechnet werden muss.
Kann ich das Makro irgendwie beschleunigen, oder habe ich anderweitig einen Fehler drin, dass mir das Ganze verlangsamt?
Ich hoffe ich konnte mein Problem soweit erklären.
Danke für eure Hilfe und Gruß
Markus

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

Betreff
Datum
Anwender
Anzeige
AW: Do-Loop Schleife läuft ewig
09.05.2022 11:03:01
ChrisL
Hi Markus
Da gibt es die übliche Pflaster-Politik indem du ScrennUpdating, Calculation und situationsbedingt Events ausschaltest (siehe Recherche).
Besser wäre es die Problemursache (Schleife) anzugehen. Lade mal eine vereinfachte Beispieldatei mit Ausgangslage, Zielbild und zeig uns dein Makro.
cu
Chris
AW: Do-Loop Schleife läuft ewig
10.05.2022 09:38:02
weitschuetz
Servus Chris,
kann ich dir die Datei auch direkt schicken? Kann die hier nicht hochladen weil zu groß.
Gruß
Markus
AW: Do-Loop Schleife läuft ewig
10.05.2022 09:44:51
ChrisL
Hi Markus
Sorry, aber schicken geht nicht. Es wäre auch nur eine kleine Musterdatei notwendig, um die Problemstellung zu erkennen d.h. du kannst die Datei stark abspecken und auf die eigentliche Problemstellung reduzieren. Evtl. die Datei noch zippen.
cu
Chris
Anzeige
AW: Do-Loop Schleife läuft ewig
10.05.2022 10:41:56
weitschuetz
Servus Chris,
kein Problem, jetzt hab ich die Dateien klein bekommen. In Datei 1 (https://www.herber.de/bbs/user/152973.xlsm) ist mein Makro drin, dies ist ebenso die Datei, in die alles reinkopiert werden soll. In Datei 2 (https://www.herber.de/bbs/user/152974.xlsx) sind die zu kopierenden Werte. 'Application.Calculation = xlManual und 'Application.EnableEvents = False hab ich auch ausprobiert, aber da bringt er mir mittendrin einen Laufzeitfehler. Den Pfad im Marko musst dann halt noch entsprechend anpassen zum ausprobieren.
Das Makro soll verschiedene Bereiche aus Datei 2 nach definierten Kriterien in wiederum fortlaufenden, ebenso definierten Bereichen kopieren. Wenn die Zahl in Spalte C Datei 2 gleich ist mit der Zahl in Zelle A5+p, dann sollen mehrere bestimmte Bereiche mit 2 in Spalte C Datei 2 kopiert werden. p erhöht sich nach jedem Durchlaufen um 136. Dies soll letztendlich bis 23000 laufen.
Ich hoffe ich konnte soiweit alles erklären.
Gruß
Markus
Anzeige
vollkommen falsches Konzept
10.05.2022 15:47:04
Rudi

Do While Workbooks(Datenquelle2).Sheets("Tabelle1").Cells(3 + i, 4) = ThisWorkbook.Sheets("Input GC B08").Cells(5 + p, 1)
wird sofort verlassen, da Workbooks(Datenquelle2).Sheets("Tabelle1").Cells(3 + i, 4) =51 und ThisWorkbook.Sheets("Input GC B08").Cells(5 + p, 1) = 382.
dito bei p=p+136 -->383 etc.
Das ist nichts mehr fürs Forum sondern eher für einen Programmierauftrag.
Gruß
Rudi
AW: Do-Loop Schleife läuft ewig
10.05.2022 16:53:52
ChrisL
Hi Markus
Ich muss Rudi recht geben. Der Umfang sprengt auch meine Möglichkeiten. Trotz intensivem Studium bin ich nicht dahinter gekommen, was unter welcher Bedingung wohin kopiert werden muss.
Der Code benötigt m.E. eine Generalüberholung.
- Die Schleife läuft irgendwie ins Nirvana
- Es fehlt die Übersichtlichkeit, um sich als Aussenstehender sinnvoll einzubringen. Hierfür wäre das Eliminieren von Select/Activate ein erster Schritt und zudem handelt es sich dabei um einen Performance-Fresser.
https://www.herber.de/vbabasics/0009.html
Deine Eigeninitiative (Code-Vorschlag) finde ich trotzdem positiv. Ich habe mir darum die Zeit genommen, um dir mal ein grobes Raster (nicht perfekt, aber ein Anfang) für die Bedingungen zur Verfügung zu stellen. Der Copy-Befehl ist schon drin und Paste an richtiger Stelle müsste man noch einfügen. Hierfür wie angetönt kein Select verwenden sondern direkt referenzieren z.B.
wbZiel.Sheets("Input GC B08").Cells(7 + j + p, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Sub Messdatenimport_B08()
Dim wbZiel As Workbook, wbQuelle As Workbook
Dim Datenquelle As String
Dim Name As String
Dim Endung As String
Dim LetzteZeile As Long
Dim rngZelle As Range
Dim lngZeile As Long
'Inputbox zum Datei öffen
Name = InputBox("Geben Sie den Dateinamen an:", "Datenquelle", "Datei 2")
Datenquelle = "xxx"
Endung = ".xlsx"
Datenquelle = Datenquelle & Name & Endung
Workbooks.OpenText Filename:=Datenquelle
'Mappen an Variablen + Zoom
Set wbZiel = ThisWorkbook
Set wbQuelle = ActiveWorkbook
ActiveWindow.Zoom = 70
'Zeugs ausschalten
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With wbQuelle.Worksheets("Tabelle1")
'Bearbeitung Messdatenarchiv B08
LetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
.Rows(1).AutoFilter
.Rows(1).AutoFilter Field:=43, Criteria1:=""
.Columns("AW:BA").Delete Shift:=xlToLeft
.Rows(4).Delete Shift:=xlUp
For Each rngZelle In .Range("AW2:BA" & LetzteZeile)
If Not IsEmpty(rngZelle) Then rngZelle = Replace(rngZelle.Text, ",", Application.DecimalSeparator) * 1
Next rngZelle
.Columns("AW:BA").NumberFormat = "0.000"
'µGC Daten kopieren
For lngZeile = 4 To LetzteZeile
If .Rows(lngZeile).EntireRow.Hidden = False Then
.Range(.Cells(lngZeile, 43), .Cells(lngZeile, 52)).Copy
If .Cells(lngZeile, 5) = 0 And .Cells(lngZeile, 6) = 0 And .Cells(lngZeile, 13) = 0 And .Cells(lngZeile, 20) = 0 And .Cells(lngZeile, 27) = 0 Then
ElseIf .Cells(lngZeile, 5) = 1 And .Cells(lngZeile, 6) = 0 And .Cells(lngZeile, 13) = 0 And .Cells(lngZeile, 20) = 0 And .Cells(lngZeile, 27) = 0 Then
'                If wbZiel.Sheets("Input GC B08").Cells(30 + q + p, 8) = 0 Then
'                Else
'                End If
ElseIf .Cells(lngZeile, 5) = 1 And .Cells(lngZeile, 6) = 0 And .Cells(lngZeile, 13) = 0 And .Cells(lngZeile, 20) = 0 And .Cells(lngZeile, 27) = 0 Then
ElseIf .Cells(lngZeile, 5) = 0 And .Cells(lngZeile, 6) = 1 And .Cells(lngZeile, 13) = 0 And .Cells(lngZeile, 20) = 0 And .Cells(lngZeile, 27) = 0 Then
ElseIf .Cells(lngZeile, 5) = 0 And .Cells(lngZeile, 6) = 0 And .Cells(lngZeile, 13) = 1 And .Cells(lngZeile, 20) = 0 And .Cells(lngZeile, 27) = 0 Then
ElseIf .Cells(lngZeile, 5) = 0 And .Cells(lngZeile, 6) = 0 And .Cells(lngZeile, 13) = 0 And .Cells(lngZeile, 20) = 1 And .Cells(lngZeile, 27) = 0 Then
ElseIf .Cells(lngZeile, 5) = 0 And .Cells(lngZeile, 6) = 0 And .Cells(lngZeile, 13) = 0 And .Cells(lngZeile, 20) = 0 And .Cells(lngZeile, 27) = 1 Then
Else
'Sonderfall
End If
End If
Next lngZeile
End With
'Zeugs einschalten
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Ich hoffe dies hilft dir weiter.
cu
Chris
Anzeige

218 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige