Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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

Wie Schleife aufbauen?

Wie Schleife aufbauen?
07.05.2020 17:22:19
Thomas
Hallo zusammen,
ich arbeite akteull als VBA-Beginner an einer neuen Datei und versuche mich an einer Schleife, welche ich aktuell nicht hinbekomme :/ Ich hoffe Ihr könnt mir helfen...
In Arbeitsblatt A habe ich eine Berechnung, in welcher ich durch die Eingabe von Werten Datumsangaben berechne. Diese laufen nacheinander ab. Beispielsweise berechne ich wann das Enddatum wäre, wenn alle Personen nacheinander Urlaub nehmen.
Das klappt soweit.
Nun möchte ich auf einem zweiten Arbeitsblatt alle Ergebnisse und Parameter aus den einzelnen Berechnung je Person in einer Tabelle auflisten.
Hier komme ich nicht weiter. Ich schaffe es nicht die zweite Schleife mit der ersten Schleife zu verbinden.
Ich habe in dem Arbeitsblatt B alle Parameter/Ergebnisse aus der Berechnung verlinkt, welche mir wichtig sind.
Diese möchte ich nacheinander in einer Tabelle kopieren. D.h. sobald die Berechnung mit dem ersten i durchgeführt wurde, sollen die verlinkten Ergebnisse in die Tabelle kopiert werden und danach eine Zeile/ein x nach unten gehen beim nächsten i.
Anbei ist die Beispieldatei und der Code den ich bis jetzt habe:
  • 
    Sub neu()
    Dim i As Integer
    Dim x As Integer
    For i = 5 To 14
    Worksheets("Berechnung").Activate
    Range("C4") = Cells(i, 6).Value ' fügt den namen ein
    Range("C5").Value = Cells(i, 9) ' benennt den Urlaubsbeginn
    Cells(i, 10).Value = Range("C7") 'setzt das Enddatum ein
    Cells(i + 1, 9).Value = Cells(i, 10) + 1 ' nennt das neue Startdatum und addiert 1
    Next i
    Worksheets("Auswertung").Activate
    For x = 4 To 13
    Worksheets("Auswertung").Range("D" & x & ":E" & x).Value = Worksheets("Auswertung").Range("D1: _
    E1").Value
    Next x
    End Sub
    

  • Hier ist die Beispieldatei:
    https:\/\/www.herber.de/bbs/user/137352.xlsm
    (Beispieldatei wurde verfeinfacht um das Grundproblem besser darzustellen)
    Ich hoffe, dass Ihr mir hierbei helfen könnt, bevor ich komplett verzweifel..

    10
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Wie Schleife aufbauen?
    07.05.2020 17:46:50
    Regina
    Hi,
    ist das Ganze eine "Fingerübung"? Denn VBA hätt eman dazu nicht gebraucht.
    Aus meiner Sicht brauchst Du keine 2. Schleife:
    Sub neu()
    Dim i As Integer
    Dim x As Integer
    With Worksheets("Berechnung")
    For i = 5 To 14
    .Range("C4") = .Cells(i, 6).Value ' fügt den namen ein
    .Range("C5").Value = .Cells(i, 9) ' benennt den Urlaubsbeginn
    .Cells(i, 10).Value = .Range("C7") 'setzt das Enddatum ein
    .Cells(i + 1, 9).Value = .Cells(i, 10) + 1 ' nennt das neue Startdatum und addiert 1
    Next i
    .Range("F5:F14").Copy
    Worksheets("Auswertung").Range("C4").PasteSpecial xlPasteValues
    .Range("I5:J14").Copy
    Worksheets("Auswertung").Range("D4").PasteSpecial xlPasteValues
    End With
    End Sub
    
    Gruß Regina
    Anzeige
    AW: Wie Schleife aufbauen?
    07.05.2020 19:32:24
    Thomas
    Hallo Regina,
    vielen Dank für deine schnelle Antwort.
    In meiner originalen Datei habe ich die Ergebniszellen quer im Arbeitsblatt verteilt.
    Dort sind noch weitere Berechnungen und Ergebnisse.
    Diese sammel ich im Arbeitsblatt "Auswertung" in einer Zeile je Person für eine bessere Übersicht.
    Dementsprechend kann ich die Bereiche leider nicht einfach so kopieren :/
    Hast du eine Idee/ einen Tipp, wie ich die Personen nacheinander einsetzen und die "Ergebnisszeilen" im Blatt Auswertung nacheinander nach unten kopieren kann?
    AW: Wie Schleife aufbauen?
    07.05.2020 19:35:27
    Regina
    ... also, ohne die Dateistruktur zu kennen, wäre das ein Stochern im Nebel. Da müsstest Du eine beispieldatei hochladen, die Deinem tatsächlichen Aufbau entspricht.
    Gruß Regina
    Anzeige
    AW: Wie Schleife aufbauen?
    07.05.2020 20:03:36
    Thomas
    Hallo Regina,
    ich habe die Datei noch einmal besser strukturiert.
    https:\/\/www.herber.de/bbs/user/137356.xlsm
    Ich glaube ich habe das Problem auch etwas schlecht beschrieben. Die originale Datei kann ich aus Datenschutzgründe leider nicht hochladen. Aber der Aufbau entsprecht nun dem der Datei. Nur das es noch wesentlich mehr "Ergebniszellen gibt".
    Ich habe im Tab "Berechnung" mehrere Ergebnisse. Diese ändern sich, wenn man eine neue Person eingibt. Die Ergebnisse hängen unter anderem davon ab, wann das "Enddatum" der vorherigen Person ist.
    Im Tab Auswertung habe ich alle Ergebnisse in einer Zeile verlinkt für eine bessere Übersicht.
    Nachdem also in der ersten Schleife die Werte für Person 1 berechnet wurden, soll die Ergebniszeile in die Tabelle kopiert werden.
    Danach sollen dann die Ergebnisse für Person 2 berechnet werden. Die Ergebniszeile soll dann wieder in die Tabelle zu Person 2 kopiert werden.
    Ich hoffe ich konnte mein Problem nun verständlicher machen :)
    Danke für deine Unterstützung :)
    Anzeige
    AW: Wie Schleife aufbauen?
    07.05.2020 20:33:24
    Regina
    ...sorry, da blicke ich nicht durch ... mir ist die Aufgabenstellung nicht klar.
    Gruß regina
    AW: Wie Schleife aufbauen?
    07.05.2020 22:14:33
    Regina
    ..ok, vielleicht habe ich es jetzt doch verstanden...
    Teste mal so:
    Sub neu()
    Dim i As Integer
    Dim x As Integer
    Dim rng As Range
    For i = 5 To 14
    With Worksheets("Berechnung")
    .Range("C4") = .Cells(i, 6).Value ' fügt den namen ein
    .Range("C5").Value = .Cells(i, 9) ' benennt den Urlaubsbeginn
    .Cells(i, 10).Value = .Range("C7") 'setzt das Enddatum ein
    .Cells(i + 1, 9).Value = .Cells(i, 10) + 1 ' nennt das neue Startdatum und addiert 1
    Set rng = Worksheets("Auswertung").Range("C5:C14").Find(.Range("C4"), Lookat:=xlWhole)
    x = rng.Row
    Worksheets("Auswertung").Range("D2:H2").Copy
    Worksheets("Auswertung").Cells(x, 4).PasteSpecial xlPasteValues
    End With
    Next i
    End Sub
    
    Gruß Regina
    Anzeige
    AW: Wie Schleife aufbauen?
    08.05.2020 09:15:17
    Thomas
    Hallo Regina,
    vielen vielen Dank!!
    Das Makro funktioniert nun genau so wie ich es benötige.
    Ich habe noch 2 kurze Fragen.
    Aus welchem Grund wurden die Punkte für die Codes gesetzt?
    Range("C4") = Cells(i, 6).Value
    

    wurde bei dir zu
    .Range("C4") = Cells(i, 6).Value
    
    Unter welchem Stichwort hätte ich in der Literatur/im Internet suchen müssen um auf diesen Code zu kommen?
    Set rng = Worksheets("Auswertung").Range("C5:C14").Find(.Range("C4"), Lookat:=xlWhole)
    x = rng.Row
    Worksheets("Auswertung").Range("D2:H2").Copy
    Worksheets("Auswertung").Cells(x, 4).PasteSpecial xlPasteValues
    
    Hat diese Methode einen bestimmten "Namen"?
    Ich bin leider recht neu im Bereich VBA/Programmierung und würde mich gerne weiter einlesen/lernen , damit ich solch eine Frage nicht mehr stellen muss...
    Vielen Dank noch einmal :)
    Anzeige
    AW: Wie Schleife aufbauen?
    08.05.2020 09:34:55
    Thomas
    Die erste Frage mit dem Punkt vor dem Code hat sich erledigt. Habe es jetzt verstanden :)
    AW: Wie Schleife aufbauen?
    08.05.2020 09:35:24
    Regina
    Hi Thomas,
    dann versuche ich mal Dir das Ganze auseinander zu ziehen.
    Man versucht in der VBA-programmierung Activate und auch Select zu vermeiden. Beides sorgt dafür, dass der Cursor "springt", erzeugt Flackern am Monitor (könnte man verhindern) und kostet Zeit. Hintergrund ist dabei: Der normale Exceluser muss den Cursor auf ein Blatt und auf eine Zelle setzen, um mit dieser Zelle zu arbeiten, via VBA kann man Zellen "anfassen", ohne sie zu aktivieren.
    Wenn man in deinem Code auf das Activate verzichtet hätte, hätte man eigentlich vor jedes Range und vor jedes Cells ein Worksheets("Berechnung") schreiben müssen. Das macht den Code unübersichtlich und kostet außerdem eine Menge "Tipp-Arbeit". Daher habe ich hier eine sogenannte With-Konstruktion genutzt. Diese wird mit With gefolgt von einem Objekt eingeleitet und endet mit einem End With. Zwischen With und End With beziehen sich alle Objekte, denen ein Punkt vorangesetzt wird auf das Objekt, das hinter With steht.
    Im konkreten Beispiel bezieht sich alles auf das Tabellenblatt "Berechnungen". man muss dabei nur höllisch aufpassen, dass man keinen Punkt vergisst.
    
    With Worksheets("Berechnung")
    .Range("C4") = Cells(i, 6).Value
    End With
    
    Dadurch das vor Cells der Punkt fehlt, würde sich Cells hier nicht automatisch auf Worksheets("Berechnung") beziehen, sondern auf das gerade aktive Tabellenblatt.
    Zu Deiner 2. Frage: Du willst ja im Blatt "Auswertung" die "richtige" Person finden. dazu hättest Du mit einer Schleife durchlaufen können, um die Person zu finden und in der "richtigen" Zeile die Eintragungen vorzunehmen. Das dauert aber u.U. (vielleicht wird die Liste auch mal länger) eine Weile. Daher habe ich die Find-Methode vorgezogen. Bei einem Treffer gibt diese Method die Zelle als Range-Objekt zurück, in der der gesuchte Wert gefunden wurde. Aus dem Range-Objekt kann man dann die Zeile auslesen.
    Such zu dem Thema mal nach "Excel VBA Find".
    Gruß Regina
    Anzeige
    AW: Wie Schleife aufbauen?
    10.05.2020 18:14:38
    Thomas
    Hallo Regina,
    danke für deine Erklärung. Ich habe es jetzt verstanden :):)

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige