Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1720to1724
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

Problem mit Schleifen

Problem mit Schleifen
07.11.2019 08:33:13
Stefan
Hallo zusammen,
ich habe mal wieder ein "Problem"
Ich versuche mich momentan mit einer Schleife.
Erstmal zu meinem Programm:
Es ist wie ein Stundennachweis aufgebaut, es werden aus drei Dateien die Stunden zusammengesammelt und sollen dann hier ausgewertet werden.
Im Sheet "Stunden" sind bis zu 1200 Daten.
In Spalte B steht das Datum des Spieles
In C die "Altersklasse"
In D der Gegner
Dann in E kommt der Name des Mitarbeiters
In F die dazugehörige Stundenanzahl
In G der zweite Name
in H die nexte Stundenanzahl usw.
das geht bis AA so .
Ich hab das bisher mit Excel gelöst, also =wenn(A1=Stunden!E2;F2
In dem Tabellenblatt 1 sollen alle Stunden des 1ten Mitarbeiters aufgelistet werden, in A1 steht der jeweilige Name
Da es aber insgesamt biszu 35 "Mitarbeiter" sind, ist das halt ein wirres Meer an Daten und v.a. wird die Datei halt imens groß (meine hat bisher ca 20.000 KB)
Die Stunden werden dann nochmal "Ausgewertet" in 1.Mannschaft und in Nachwuchs. Also habe ich 1,5mio(35*3*1200*12) dieser Wenn-Formeln. Das ist einfach nicht mehr übersichtlich.
Es muss abgefragt werden, ob im sheet Stunden in z.b. E2 der Name mit dem Namen in Sheets "1" Zelle "A1" übereinstimmt, wenn ja, dann müssen die Zellen B2,C2,F2 kopiert und im Sheet "1" eingefügt werden. das muss dann bis E1200 gemacht werden und halt dann bei G2 wieder anfangen.
Ich habe es schon versucht, mit einer Schleife, ich scheitere aber schon kläglich daran, die Zellenabfrage zu bestimmen.
Ich hoffe hier auf etwas Hilfe oder einen Denkanstoß.
Ich habe eine deutlich abgespeckte Datei hochgeladen, welche meine Grundidee verdeutlichen soll, hoffentlich habe ich es etwas erklären können.
https://www.herber.de/bbs/user/132992.xlsx
Grüße
Stefan Hiemer

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Schleifen
07.11.2019 08:48:55
ChrisL
Hi Stefan
Es wäre natürlich hilfreich, wenn die Namen übereinstimmen würden (Bayer Guido vs. Guido Bayer).
Hier ein Muster für die Schleife....
Sub t()
Dim wks As Worksheet, b As Boolean
Dim lngZeile1 As Long, lngZeile2 As Long
Application.ScreenUpdating = False
With Worksheets("Stunden")
For lngZeile1 = 2 To .Cells(Rows.Count, 5).End(xlUp).Row
b = False
For Each wks In ThisWorkbook.Worksheets
If wks.Range("A1") = .Cells(lngZeile1, 5) Then
b = True
Exit For
End If
Next wks
If b = False Then
MsgBox "Kein Blatt " & .Cells(lngZeile1, 5) & " vorhanden."
Else
lngZeile2 = wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
wks.Cells(lngZeile2, 1) = .Cells(lngZeile1, 2)
wks.Cells(lngZeile2, 2) = .Cells(lngZeile1, 3)
End If
Next lngZeile1
End With
End Sub

cu
Chris
Anzeige
AW: Problem mit Schleifen
07.11.2019 10:19:52
Stefan
Hallo Chris,
erstmal danke für deine schnelle Antwort,
das mit dem Namen, war mein Fehler, ist aber auch schon korrigiert...
Ich hab noch ne Frage, welche Codezeile ist hier für was zuständig?
Ich möchte euch das nächste mal wenn ich eine Schleife brauche ja nicht schon wieder belästigen :)
Und wenn ich deine Zeilen bei mir im Code Starte, bekomme ich nur die

MsgBox "Kein Blatt " & .Cells(lngZeile1, 5) & " vorhanden."
ausgespuckt, aber immer unterschiedliche Namen, er haut mir ca 15 mal die MSGBox raus und dann ist er fertig...
Dankeschonmal
Stefan
Anzeige
AW: Problem mit Schleifen
07.11.2019 11:16:04
ChrisL
Hi Stefan
Ja wenn kein Einzelblatt vorhanden ist, dann kommt die Meldung. Gemäss deiner Beschreibung soll der Name aus Stunden mit den Blättern verglichen werden, weshalb ich annehme, dass die Blätter schon vorhanden sind. Im Beispiel war halt nur ein Einzelblatt vorhanden, weshalb bei den anderen Namen die Fehler kommen.
cu
Chris
AW: Problem mit Schleifen
07.11.2019 13:17:32
Stefan
Hallo Chris,
jetzt hab ichs verstanden danke.
Da rattert das Programm aber doch ganz schön lang, bis er allein die erste Spalte übernommen hat, dies auf insgesamt 10 auszuweiten, würde ja dann eine ewigkeit dauern, bis er alles hat....
aber danke für deinen Code und die reingesteckte Arbeit
Gruß
Stefan
Anzeige
AW: Problem mit Schleifen
07.11.2019 19:07:51
ChrisL
Hi Stefan
Fällt mir auf, dass du INDIREKT verwendest, darum sollte folgende Ergänzung ein Unterschied machen:
Application.Calculation = xlCalculationManual
' bestehender Code
Application.Calculation = xlCalculationAutomatic
Warum?
https://www.tabellenexperte.de/excel-im-schneckentempo-volatile-funktionen/
Ersetze INDIREKT durch INDEX.
Die 1,5 Mio. WENN's sind mir gar nicht aufgefallen, da ich mich gleich auf die Schleife gestürzt hatte.
Ich möchte mich Piet anschliessen. Da und dort kann man zwar noch etwas Schleifen-Kosmetik betreiben, aber eine echte Verbesserung erreichst du mit einem Neustart.
Um die Daten zusammenzuziehen und auszuwerten (Tabellenblätter Stunden, Auswertung, Bankdienstler) wäre m.E. Power Query (PQ) prädestiniert. Mindestens die Datenverbindung und die Einteilung in Stunden!AG:AP (Spalte mit Bedingung hinzufügen) wäre damit ein Klacks.
Das Duplizieren der ausgewerteten Daten auf 35 Einzelblätter (so mein Verständnis) ist aus reiner "Daten-Optik" Quatsch. Ich weiss es gibt manchmal Gründe, aber es hat dann nichts mit einer "Auswertung" zu tun.
Ein möglicher Lösungsansatz könnte sein, alle 35 Namen in einer Schleife im Autofilter abarbeiten lassen. Dazwischen z.B. ein PDF-Print einbauen, falls du die Blätter z.B. für Mailversand einzeln brauchst. Oder gleich einen Word-Serienbrief erstellen.
cu
Chris
Anzeige
AW: Problem mit Schleifen
08.11.2019 07:28:53
Stefan
Hallo Chris,
mit der zusätzlichen Codezeile, läuft es schon bedeutend schneller, danke schonmal.
Ich hab nur die IndirektFormel genommen, um mir Arbeit zu sparen, es ist einfach leichter mit flexiblem Zellenbezug....
Aber diese Indirekt-Formeln sind ja deutlich in der "Minderheit" es sind ja "nur" 805, mach dies soviel aus? Ich kann mir die Daten natürlich auch durch "normalen" Zellenbezug abfragen.
Dann zuerst deine Frage mit den 35 Einzelauswertungen. Es war einfach bedeutend einfacher, diese Auswertungstabelle einmal zu schreiben und dann einfach per Copy&Paste zu kopieren, es sind ja alle 35 Einzelauswertungen gleich, ich musste dann eben nurnoch den Zellbezug in A1 ändern um den neuen Namen abfragen zu können.
Ich hätte perse kein Problem, dieses Programm einmal komplett neu zu machen, wie gesagt, es gehen keine Daten verloren, da sie ja erst am Ende zusammengefasst werden.
Das mit dem Power-Query sieht sehr schick aus, das habe ich aber gerade zum ersten mal gehört...
So wie ich das verstehe, kann man damit halt die Daten aus einer anderen Datei importieren (das klappt soweit auch schon, aber, mein größeres Problem war ja das Auswerten der Daten, sollte dass dann mit deiner Schleife passieren, oder ist dafür auch das Power Query gut?
Danke und gruß
Stefan Hiemer
Anzeige
AW: Problem mit Schleifen
08.11.2019 08:25:26
ChrisL
Hi Stefan
Ich meine nur, was du mit INDIREKT machst, kannst du genauso gut mit INDEX machen. INDEX ist nicht volatil, INDIREKT schon (siehe Link im letzten Beitrag). Normalerweise kein grosses Thema, aber da du schon Performance-Probleme hast, würde ich die nicht volatile INDEX-Variante verwenden.
Zu PQ
Userbild
cu
Chris
AW: Problem mit Schleifen
08.11.2019 12:16:36
Stefan
Hallo Chris,
ich hab das mit dem Index geändert.
Jetzt hab ich erstmal noch eine Frage zu der Codezeile.
For lngZeile1 = 2 To .Cells(Rows.Count, 5).End(xlUp).Row
Wenn ich das richtig verstehe, fängt er in Zeile 2 an zu suchen und hört in zeile 1048576 auf?
Da sucht er ja 1047376 Zeilen umsonst ab...
Oder verstehe ich da was falsch?
Gruß
Stefan
Anzeige
AW: Problem mit Schleifen
08.11.2019 14:47:12
ChrisL
hi Stefan
Es wird ab der letzten Zeile (je nach Version Zeile 1048576), Suchrichtung von unten nach oben, der erste Wert gesucht.
In anderen Worten, es handelt sich um die letzte Zeile des benutzten Bereichs.
cu
Chris
AW: Problem mit Schleifen
08.11.2019 18:36:40
ChrisL
Meine Aussage bezog sich auf diesen Teil
.Cells(Rows.Count, 5).End(xlUp).Row
Die Schleife läuft natürlich schon von oben nach unten :)
so wird es deutlicher
Dim LetzteZeile As Long
LetzteZeile = .Cells(Rows.Count, 5).End(xlUp).Row
MsgBox "Die letzte Zeile in Spalte 5 ist: " & LetzteZeile
For lngZeile1 = 2 To LetzteZeile

Diese neue Variante mit Variable wäre eigentlich etwas schneller (kosmetische Millisekunden), weil die letzte Zeile nicht mehrfach ermittelt werden muss.
Anzeige
AW: Problem mit Schleifen
11.11.2019 06:59:52
Stefan
Hallo Chris,
herzlichen Danke, jetzt habs sogar ich verstanden :)
Du hast mir sehr weitergeholfen.
grüße
Stefan
AW: Problem mit Schleifen
07.11.2019 12:41:45
Piet
Hallo Stefan
wenn ich mir den Thread so anschaue, 1.5 Millionen Wenn Formeln, laeuft dein PC überhaupt noch? Da solltest du in Ruhe mal überlegen das man 80-90% der Formeln in reinen Text umwandeln kann, was die Datei wesentlich schneller machen würde. So eine Massnahme unternimmt man aber nicht bei einer laufenden Datei!!
Weil das Jahresende vor der Tür steht, waere es eine Überlegung die Datei für das naechste Jahr komplett umzustellen. Das ist aber keine 5 Minute Arbeit und muss ausreichend getestet sein, damit es auch sicher funktioniert. Die Zeit dafür haetten wir ggf.
Die Entscheidung ob du da was aendern willst liegt bei dir ...
mfg Piet
Anzeige
AW: Problem mit Schleifen
07.11.2019 13:20:28
Stefan
Hallo Piet,
das ist ja keine laufende Datei. Die drei laufenden Dateien sind auf dem Rechnern gespeichert wo man es eingibt, in der "Auswertungsdatei" werden am Ende nur die drei Stundenlisten zusammengefasst und eben dann ausgewertet.
Ja der PC läuft noch, braucht aber schonmal ne Minute oder zwei, bis die Datei geöffnet ist ;)
Was meinst du mit Formeln in reinen Text umwandeln, also das in VBA zu "vereinfachen"?
Grüße
Stefan
AW: Problem mit Schleifen
07.11.2019 18:52:45
Piet
Hallo Stefan
ich habe in deinem Beispiel gesehen das in der Tabelle "Stunden" und Bankdienstler lauter Formeln stehen. Ich weiss nicht ob die Daten kopiert wurden, und Excel dann die Formeln übernommen hat? Wenn ja kannst du beim Kopieren den Befehl "Werte einfügen" vedrwenden, dann wird nur der Text eingefügt, ohne Formeln!
Aus Erfahrhrung weiss ich das viel mit Formeln gearbeitet wird, um Daten durch SVerweise zu holen. Nachteil ist, das Excel bei Eingaben immer wieder viele Formeln berechnen muss. Das kann viel Zeit in Anspruch nehmen. Bei Daten wie Namen ist es sinnvoller die als Text eintragen zu lassen. Das kann man auch mit VBA erledigen. Texte müssen nicht berechnet werden!! Formeln ist immer ein abwaegen.
Profis holen sich auch schon mal Werte per Formel, notieren sich die Formeln irgendwo, und wandeln nach dem Abarbeiten des SVerweis die Formeln durch Copy und "Werte einfügen" in Text um.
mfg Piet
Anzeige
AW: Problem mit Schleifen
08.11.2019 06:41:16
Stefan
Hallo Piet,
also in diesen beiden Tabellen, werden zum einen alle "Mitarbeiter" aus einem der drei Stundennachweise "geholt", dass die Auswertung auch weiß, wer alles dabei is. Es ändert sich ja jedes Jahr was, und so wollte ich es verallgemeinern, dass eben an dem Programm "Auswertung" nie was geändert werden muss, so dass auch jemand der absolut keine Kenntnisse von Excel hat diese Auswertung vornehmen könnte.
In der Tabelle Stunden, werden alle einträge aus den drei Stundennachweisen geholt, so dass diese nur auf dem selben Laptop sein müssen. da es in jedem dieser Stundennachweise bis zu 400 Einträge geben kann, sind dort soviele Formeln.
Zu deinem Vorschlag, z.B. die Namen/Stunden per VBA zu holen, ich habe es versucht, funktioniert hats insoweit, dass er es kopiert hat, wenn die Dateien "Stundennachweis" geöffnet waren, aber sobald diese nichtmehr "offen" sind, kam ein Laufzeitfehler.
Man könnte natürlich diese 1200 Zeilen via einer Variable "zwischenspeichern" und dann jeweils wieder draufschreiben lassen, aber dies wäre meines Erachtens doch immens viel an Code-Arbeit. Also jede einzeln Zelle aufrufen, Zwischenspeicher und dann wieder reinkopieren.
AW: Problem mit Schleifen
08.11.2019 14:05:44
Piet
Hall Stefan
ich denke das die Mögkichkeiten von VBA sehr viel umfangreichedr sind wie es dem Normalen Benutzer bekannt ist. Man kann z.B. mit dem Makro Recorder aufzeichen wie man die Stundennachweise aus drei Dateien in die Auswertung kopieren kann. Kann die Sheets nach der Auswertung auch wieder löschen.
Bleibt die Frage ob man den Aufwand betreiben will, oder lieber alles beim Altgewohnten belaesst?
mfg Piet
AW: Problem mit Schleifen
08.11.2019 14:11:50
Piet
Nachtrag
ich habe gerade was von PQ gelesen. Das ist natürliche eine bessere Lösung wo ich Nicht mithalten kann!
Viel Erfolg beim umsetzen dieser Idee...
mfg Piet
AW: Problem mit Schleifen
11.11.2019 07:01:43
Stefan
Hallo Piet,
danke für deine Hilfe, ich habe es jetzt übers Wochenende größtenteils schon mit PQ umgesetzt, und es läuft schon deutlich schneller(einfacher) :)
trotzdem Danke und Gruß
Stefan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige