Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schleife mit einer Variable als Datum

Forumthread: Schleife mit einer Variable als Datum

Schleife mit einer Variable als Datum
25.07.2016 07:07:42
NiSt
Hallo zusammen,
ich versuche schon seit Freitag dieses Problem zu lösen.
Ich möchte gerne eine Variable k als Schleife laufen lassen.
Diese Variable ist ein Anfangsdatum, dass sich in Zelle N2 befindet. Jetzt soll k vom Anfangsdatum bis zum Enddatum, dass sich in Zelle O2 befindet, laufen.
Kann mit jmd. weiterhelfen?
Vielen Dank schon mal und viele Grüße
Niko
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife mit einer Variable als Datum
25.07.2016 07:26:44
baschti007
Huhu vielleicht so ?
Gruß Basti
Sub LoopI()
Range(Range("K1"), Range("K1").End(xlDown)).ClearContents
x = 1
Do
Range("K" & x) = Range("N2") + x - 1
If Range("N2") + x - 1 = Range("O2") Then Exit Do
x = x + 1
Loop
End Sub

AW: Schleife mit einer Variable als Datum
25.07.2016 08:13:06
UweD
Hallo
hier als "richtige Schleife"
Sub Schleife()
    Dim K As Date, von As Date, bis As Date
    With Sheets("Tabelle1")
        von = .Range("N2")
        bis = .Range("O2")
        For K = von To bis
            'mach was damit 
            MsgBox K
        Next
    End With
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD
Anzeige
AW: Schleife mit einer Variable als Datum
25.07.2016 08:39:26
NiSt
Super!
Funktioniert UweD.
Vielen Dank!
Danke für die Rückmeldung owT
25.07.2016 09:25:34
UweD
AW: Danke für die Rückmeldung owT
25.07.2016 10:12:35
NiSt
Hallo UweD,
bei der Filterfunktion findet er mein Datum nicht, da dieses auf dem Deutschen Standard eingestellt ist und die Filterfunktion nach dem Amerikanischen Standard abläuft.
Wie kann ich das ändern?
Ich möchte gerne die Deutsche Schreibweise beibehalten.
Grüße
Anzeige
AW: Danke für die Rückmeldung owT
25.07.2016 10:25:15
UweD
dann so
Sub Schleife()
    Dim K As Date, von As Date, bis As Date
    With Sheets("Mitarbeiter 1")
        von = .Range("N2")
        bis = .Range("O2")
        For K = von To bis
            .Range("A2:K2").AutoFilter Field:=7, Criteria1:=Format(K, "DD/MM/YYYY")
        Next
    End With
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD
Anzeige
AW: Danke für die Rückmeldung owT
25.07.2016 10:29:19
NiSt
Perfekt!
Danke! Läuft!
prima!
25.07.2016 10:43:04
UweD
AW: Danke für die Rückmeldung owT
25.07.2016 11:00:52
NiSt
Vielleicht kannst du mir ja weiterhelfen...
Ich lese aus einer Liste die Anzahl der Mitarbeiter raus und generiere der Anzahl entsprechend neue Sheets mit Namen der Mitarbeiter (Mitarbeiter1, Mitarbeiter2,...). In diesen Sheets sind Daten drin, die nach Tagen sortiert sind. Jetzt generiere ich noch die Anzahl an Tagen die der Mitarbeiter arbeiten muss, hier die Variable "j", und auch dementsprechend der Anzahl der Tage werden weitere Sheets angelegt, die hinter den Sheet des demensprechenden Mitarbeiters angelegt werden. Soweit funktioniert das auch alles schon. Was ich nicht hinbekomme ist die Zuteilung der Arbeitspakete, die der einzelne Mitarbeiter pro Tag abzuleisten hat. Kannst du mir da weiterhelfen?
Hier ist der bereits geschriebene Code:
Dim j As Integer, i As Integer
Dim K As Date, von As Date, bis As Date, bis2 As Integer
For i = 1 To Range("I1") 'Anzahl Mitarbeiter
With Sheets("Mitarbeiter i")
von = .Range("O2")
bis = .Range("O2")
For K = von To bis 'Datum von bis
bis2 = .Range("Q2")
For j = 1 To bis2 'Anzahl Tage, die der Mitarbeiter arbeiten muss
ActiveWorkbook.Worksheets("Mitarbeiter 1").Range("A2:K2").AutoFilter Field:=8, Criteria1:=Format(K, "DD/MM/YY")
ActiveWorkbook.Worksheets("Mitarbeiter 1").Range("A2:K2").AutoFilter Field:=10, Criteria1:=i
ActiveWorkbook.Worksheets("Mitarbeiter 1").Range("A:R").Copy
Selection.AutoFilter
ActiveWorkbook.Worksheets("M1T" & j).SpecialPaste xlPasteValues
Next
Next
End With
Next
End Sub
Anzeige
AW: Beispieldatei
25.07.2016 12:59:15
UweD
Hallo nochmal
ist die Zuteilung der Arbeitspakete, die der einzelne Mitarbeiter pro Tag abzuleisten hat.
Da blicke ich noch nicht durch..
Hast du mal eine Musterdatei mit entsprechenden Tabellen und einer Solldarstellung, wie du es später haben möchtest.
Gruß UweD
AW: Beispieldatei
25.07.2016 14:23:12
NiSt
Hier habe ich dir meine Tabelle aufgearbeitet:
https://www.herber.de/bbs/user/107225.xlsm
Also Mitarbeiter 1 hat in diesem Fall drei Arbeitspakete an drei Tagen.
Dieser Anzahl entsprechend wurden drei Sheets für Mitarbeiter1 angelegt. Für Tag1 (M1T1), für Tag2 (M1T2) und für Tag3 (M1T3). Die Arbeitspakete sollen mit Abhängigkeit des Datums den jeweiligen Tag zugeordnet werden.
Spalte N bis Q habe ich mir noch dementsprechend Hilfszellen gemacht um die Anzahl der Tage als Zahl zu bekommen.
Vielen Dank schon mal für deine Bemühungen.
Anzeige
AW: Beispieldatei
25.07.2016 15:03:42
UweD
Hallo
Private Sub CommandButton1_Click()

    Dim j As Integer, i As Integer
    Dim K As Date, von As Date, bis As Date, bis2 As Integer

    For i = 1 To Range("I1")
        With Sheets("Mitarbeiter " & i)
            von = Int(.Range("O2")) 'Zeit wird abgeschnitten 
            bis = Int(.Range("O2"))
            LR = .Cells(.Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte 
            For K = von To bis
                bis2 = .Range("Q2")
                For j = 1 To bis2
                    .Range("A2:K2").AutoFilter Field:=7, Criteria1:=Format(K, "DD/MM/YY") 'Spalte G ohne Zeit 
                    .Range("A2:K2").AutoFilter Field:=10, Criteria1:=i
                    .Range("A1:R" & LR).Copy Worksheets("M1T" & j).Range("A1")
                    .ShowAllData
                Next
            Next
          End With
    Next
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Das filtern in der Datei klappte nicht, weil du nicht nur Datum, sondern auch noch Zeiten enthalten hast.
in I1 habe ich mal einen Wert 3 eingetragen, dann klappt es für Mitarbeiter 1
Bei Mitarbeiter 2 hats du einen Anderen Aufbau...
Gruß UweD
Anzeige
AW: uppps
25.07.2016 15:31:43
UweD
hab gerade gemerkt, das dass mit der geschachtelten for Schleife nicht klappt.
so ?
Private Sub CommandButton1_Click()

    Dim j As Integer, i As Integer
    Dim K As Date, von As Date, bis As Date, bis2 As Integer

    For i = 1 To Range("I1")
        With Sheets("Mitarbeiter " & i)
            von = Int(.Range("O2")) 'Zeit wird abgeschnitten 
            bis = Int(.Range("P2"))
            LR = .Cells(.Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte 
            j = 0
            For K = von To bis
                j = j + 1
                .Range("A2:K2").AutoFilter Field:=7, Criteria1:=Format(K, "DD/MM/YY") 'Spalte G ohne Zeit 
                .Range("A2:K2").AutoFilter Field:=10, Criteria1:=i
                .Range("A1:R" & LR).Copy Worksheets("M" & i & "T" & j).Range("A1")
                .ShowAllData
            Next
          End With
    Next
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD
Anzeige
AW: uppps
26.07.2016 10:01:38
NiSt
Ja super!!
Das klappt schon mal.
Vielen vielen Dank!
AW: uppps
26.07.2016 10:39:20
NiSt
Moin Uwe,
wieso macht er das für den Mitarbeiter zwei nicht?
AW: uppps
26.07.2016 11:00:34
UweD
Hi
in deiner Mustermappe ist der Aufbau der Tabellen unterschiedlich.
Gruß UweD
Anzeige
AW: uppps
26.07.2016 11:08:16
NiSt
Ok, dann schaue ich mir das noch mal an.
AW: Schleife mit einer Variable als Datum
25.07.2016 08:22:41
NiSt
Hey Basti,
vielen Dank schon mal für deine Antwort!
Wenn ich das so übernehme, rechnet er sich tot.
K1 brauche ich gar nicht.
Ich brauche erst ein mal eine Schleife für ein Datum, dass von einem Anfangsdatum (Zelle N2) bis zu einem Enddatum (Zelle O2) läuft und das möchte ich dann in eine Filterfunktion einbauen, die wie folgt ausschaut:
ActiveWorkbook.Worksheets("Mitarbeiter 1").Range("A2:K2").AutoFilter Field:=7, Criteria1:=k
Das Kriterium k soll hier mit der Schleife laufen.
Grüße!!
Anzeige
AW: Schleife mit einer Variable als Datum
25.07.2016 08:20:56
Beverly
Hi Niko,
Sub Schleife()
Dim lngZaehler As Long
For lngZaehler = 0 To Range("O2") - Range("N2")
MsgBox Range("N2") + lngZaehler
Next lngZaehler
End Sub


;
Anzeige
Anzeige

Infobox / Tutorial

Schleife mit einer Variable als Datum in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Schleife in Excel VBA zu erstellen, die mit einer Variable als Datum arbeitet, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (dein Dokument)" und wähle "Einfügen" > "Modul".

  3. Kopiere den folgenden Code in das Modul:

    Sub SchleifeMitDatum()
       Dim K As Date, von As Date, bis As Date
       von = Range("N2").Value
       bis = Range("O2").Value
    
       For K = von To bis
           ' Hier kannst du mit dem Datum K arbeiten
           MsgBox K
       Next K
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus: Drücke ALT + F8, wähle SchleifeMitDatum und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Problem: Die Schleife endet nicht.

    • Lösung: Stelle sicher, dass das Enddatum (O2) nach dem Anfangsdatum (N2) liegt.
  • Problem: Datum wird nicht im richtigen Format angezeigt.

    • Lösung: Stelle sicher, dass die Zellen N2 und O2 im Datumsformat formatiert sind, z.B. "TT/MM/JJJJ".

Alternative Methoden

Eine alternative Methode, um eine Schleife mit Datumsbereichen zu erstellen, ist die Verwendung einer Do While-Schleife:

Sub AlternativeSchleife()
    Dim K As Date
    K = Range("N2").Value

    Do While K <= Range("O2").Value
        MsgBox K
        K = K + 1 ' Einen Tag hinzufügen
    Loop
End Sub

Diese Methode ist besonders nützlich, wenn du mehr Kontrolle über die Schleifenbedingungen benötigst.


Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele für die excel schleife vba:

  1. Filtern von Daten basierend auf dem Datum:

    Sub FilterNachDatum()
       Dim K As Date
       Dim von As Date, bis As Date
       von = Range("N2").Value
       bis = Range("O2").Value
    
       For K = von To bis
           ActiveWorkbook.Worksheets("Mitarbeiter 1").Range("A2:K2").AutoFilter Field:=7, Criteria1:=K
           ' Weitere Aktionen hier
       Next K
    End Sub
  2. Erstellen von neuen Arbeitsblättern für jeden Tag im Zeitraum:

    Sub NeueSheetsErstellen()
       Dim K As Date, von As Date, bis As Date
       von = Range("N2").Value
       bis = Range("O2").Value
    
       For K = von To bis
           Sheets.Add(After:=Sheets(Sheets.Count)).Name = "Tag_" & Format(K, "DDMMYY")
       Next K
    End Sub

Tipps für Profis

  • Verwende die Format-Funktion, um sicherzustellen, dass das Datum im gewünschten Format verwendet wird, z.B. Format(K, "DD/MM/YYYY").
  • Nutze die DateDiff-Funktion, um die Anzahl der Tage zwischen zwei Daten zu berechnen und so Schleifen zu optimieren.
  • Achte auf die Performance: Bei großen Datenmengen kann es sinnvoll sein, die Bildschirmaktualisierung auszuschalten, um die Ausführungsgeschwindigkeit zu erhöhen.
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich die Schleife anpassen, um nur an bestimmten Wochentagen zu iterieren? Du kannst eine If-Bedingung innerhalb der Schleife verwenden, um nur bestimmte Wochentage zu berücksichtigen. Zum Beispiel:

If Weekday(K) <> vbSunday Then ' Sonntag ignorieren
    ' Aktionen hier
End If

2. Was passiert, wenn die Zellen N2 oder O2 leer sind? Stelle sicher, dass du eine Fehlerüberprüfung einfügst, um sicherzustellen, dass die Zellen nicht leer sind, bevor du die Schleife startest:

If IsEmpty(Range("N2")) Or IsEmpty(Range("O2")) Then
    MsgBox "Bitte N2 und O2 ausfüllen!"
    Exit Sub
End If

Mit diesen Anleitungen und Beispielen bist du bestens gerüstet, um mit einer excel schleife vba zu arbeiten, die eine Variable als Datum nutzt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige