Hallo zusammen
um meinen Kollegen die Arbeit zu erleichtern bastele ich mit Hilfe von chatGPT an einem Code, komme allerdings an dieser Stelle nicht weiter.
Beschreibung der Aufgabe:
Eine Excel-Datei enthält 2 Blätter: "Buchungsliste" und "Manifest".
Jede Zeile des "Manifest"-Blatts enthält Nachnamen in Spalte A, Vornamen in Spalte B und Geburtsdaten in Spalte I (formatiert als Datum).
Die "Buchungsliste" enthält ebenfalls die gleichen Nachnamen in Spalte B und die gleichen Vornamen in Spalte C, jedoch nicht in jeder Zeile. Wenn ein Name in Spalte B und C vorhanden ist, folgt mindestens eine leere Zeile. Erst in der übernächsten Zeile folgt der Hinweis "Bus-Hinfahrt" oder "Bus-Rückfahrt" in Spalte A und ein korrespondierendes Datum in Spalte B
Hier ist ein typisches Beispiel für die "Buchungsliste":
Zeile 3, Spalte B: "Douglas"; Zeile 3, Spalte C: "Michael"
Zeile 4: leer
Zeile 5: leer
Zeile 6: Spalte A: "Bus-Hinfahrt"; Zeile 6, Spalte B: "01.06.2023"
Zeile 7: Spalte A: "Bus-Rückfahrt"; Zeile 7, Spalte B: "14.06.2023"
Zeile 8, Spalte B: "Douglas"; Zeile 8, Spalte C: "Michael"
Zeile 9: leer
Zeile 10: leer
Zeile 11: Spalte A: "Bus-Hinfahrt"; Zeile 11, Spalte B: "01.06.2023"
Zeile 12: Spalte A: "Bus-Rückfahrt"; Zeile 12, Spalte B: "14.06.2023"
Für jeden Namen und das entsprechende Geburtsdatum im "Manifest"-Blatt sollte der Name in der "Buchungsliste" gefunden werden. Wenn der Name gefunden wurde, sollten die Daten "Bus-Hinfahrt" und "Bus-Rückfahrt" (in den folgenden Zeilen) gefunden werden. Anschließend sollte überprüft werden, ob das Geburtsdatum aus dem "Manifest"-Blatt zwischen den Daten "Bus-Hinfahrt" und "Bus-Rückfahrt" liegt. Wichtig: dabei sollen die Jahreszahlen ignoriert werden. Wenn dies der Fall ist, soll die Zeile hervorgehoben werden.
Der aktuelle Code kopiert mir die Daten nach "Manifest" und stellt den geforderten Vergleich vermeintlich an, allerdings wird keine der Zeilen hervorgehoben, obwohl es mindestens eine geben müsste. Hat jemand eine Idee wo der Fehler steckt?
Liebe Grüße
Daniel
I apologize for the confusion. It seems there is still an issue with the date comparison. Let's try a different approach to compare the dates correctly. Here's the updated code:
vba
Sub UpdateManifestDatesAndHighlight()
Dim manifestSheet As Worksheet
Dim buchungslisteSheet As Worksheet
Dim manifestLastRow As Long
Dim buchungslisteLastRow As Long
Dim manifestRow As Long
Dim buchungslisteRow As Long
Dim lastName As String
Dim firstName As String
' Set the worksheet variables
Set manifestSheet = ThisWorkbook.Sheets("Manifest")
Set buchungslisteSheet = ThisWorkbook.Sheets("Buchungsliste")
' Get the last rows in each sheet
manifestLastRow = manifestSheet.Cells(Rows.Count, "A").End(xlUp).Row
buchungslisteLastRow = buchungslisteSheet.Cells(Rows.Count, "B").End(xlUp).Row
' Clear the existing dates in columns J and K of Manifest
manifestSheet.Range("J4:K" & manifestLastRow).ClearContents
manifestSheet.Range("H4:H" & manifestLastRow).ClearContents
' Loop through each row in the Manifest sheet starting from the fourth row
For manifestRow = 4 To manifestLastRow
' Get the last name and first name from the Manifest sheet
lastName = manifestSheet.Cells(manifestRow, "A").Value
firstName = manifestSheet.Cells(manifestRow, "B").Value
' Loop through each row in the Buchungsliste sheet
For buchungslisteRow = 3 To buchungslisteLastRow
' Check if the current row in Buchungsliste matches the last name and first name
If buchungslisteSheet.Cells(buchungslisteRow, "B").Value = lastName And _
buchungslisteSheet.Cells(buchungslisteRow, "C").Value = firstName Then
' Search for the next rows containing "Bus-Hinfahrt" and "Bus-Rückfahrt"
Dim busHinfahrtRow As Long
Dim busRueckfahrtRow As Long
busHinfahrtRow = buchungslisteRow + 1
Do While buchungslisteSheet.Cells(busHinfahrtRow, "A").Value <> "Bus-Hinfahrt" And _
busHinfahrtRow <= buchungslisteLastRow
busHinfahrtRow = busHinfahrtRow + 1
Loop
busRueckfahrtRow = busHinfahrtRow + 1
Do While buchungslisteSheet.Cells(busRueckfahrtRow, "A").Value <> "Bus-Rückfahrt" And _
busRueckfahrtRow <= buchungslisteLastRow
busRueckfahrtRow = busRueckfahrtRow + 1
Loop
' Copy the dates to the Manifest sheet
Dim hinfahrtDate As Date
Dim rueckfahrtDate As Date
hinfahrtDate = CDate(buchungslisteSheet.Cells(busHinfahrtRow, "B").Value)
rueckfahrtDate = CDate(buchungslisteSheet.Cells(busRueckfahrtRow, "B").Value)
manifestSheet.Cells(manifestRow, "J").Value = Format(hinfahrtDate, "dd.mm.")
manifestSheet.Cells(manifestRow, "K").Value = Format(rueckfahrtDate, "dd.mm.")
' Copy column I to column H in Manifest
manifestSheet.Cells(manifestRow, "H").Value = Format(manifestSheet.Cells(manifestRow, "I").Value, "dd.mm.")
' Clear the year portion in column H, J, and K
manifestSheet.Cells(manifestRow, "H").NumberFormat = "dd.mm."
manifestSheet.Cells(manifestRow, "J").NumberFormat = "dd.mm."
manifestSheet.Cells(manifestRow, "K").NumberFormat = "dd.mm."
' Check if the date in column H is between the dates in columns J and K
Dim dateH As Date
Dim dateJ As Date
Dim dateK As Date
dateH = CDate(manifestSheet.Cells(manifestRow, "H").Value)
dateJ = CDate(manifestSheet.Cells(manifestRow, "J").Value)
dateK = CDate(manifestSheet.Cells(manifestRow, "K").Value)
' Compare the dates
If dateH >= dateJ And dateH <= dateK Then
' Highlight the row
manifestSheet.Rows(manifestRow).Interior.Color = RGB(255, 255, 0) ' Yellow
End If
' Exit the loop once found
Exit For
End If
Next buchungslisteRow
Next manifestRow
MsgBox "Dates updated and rows highlighted successfully!"
End Sub
|