AW: VBA Code optimieren
12.02.2024 10:49:26
Beverly
Hi Thomas,
versuche es mal so:
Sub TerminKonflikt()
Call Clear_I
Dim i&, j&, k&, tmpA, tmpB, min#, max#
Dim tmpNext
Dim varFehler As Variant
Dim varNext As Variant
With Tabelle2
For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row - 1
If .Cells(i, 2) = .Cells(i + 1, 2) Then ' auf gleiches Datum prüfen
min = .Cells(i, 3) ' min max Zeitzahl ermitteln
If .Cells(i + 1, 3) min Then min = .Cells(i + 1, 3)
max = .Cells(i, 4)
If .Cells(i + 1, 4) max Then max = .Cells(i + 1, 4)
' prüfen auf Zeitfenster zwischen min und max
If .Cells(i, 3) >= min And .Cells(i + 1, 3) >= min And .Cells(i, 4) = max And .Cells(i + 1, 4) = max Then
tmpA = Split(.Cells(i, 8), ", ")
tmpB = Split(.Cells(i + 1, 8), ", ")
For j = 0 To UBound(tmpA)
varFehler = Application.Match(tmpA(j), tmpB, 0)
If Not IsError(varFehler) Then ' prüfen auf doppellten Eintrag(getrennt durch Komma + Leerzeichen)
' Zelle ist noch leer
If .Cells(i, 9) = "" Then
.Cells(i, 9) = "Terminkonflikt " & tmpA(j)
Else
' Inhalt Zielzelle in Array (getrennt durch Leerzeichen)
tmpNext = Split(.Cells(i, 9), " ")
' prüfen ob laufender Wert bereits in Ergebniszelle vorhanden
varNext = Application.Match(tmpA(j), tmpNext, 0)
' wenn nicht vorhanden dann hinzufügen
If IsError(varNext) Then .Cells(i, 9) = .Cells(i, 9) & ", " & tmpA(j)
End If
If .Cells(i + 1, 9) = "" Then
.Cells(i + 1, 9) = "Terminkonflikt " & tmpA(j)
Else
' Inhalt Zielzelle in Array (getrennt durch Leerzeichen)
tmpNext = Split(.Cells(i + 1, 9), " ")
' prüfen ob laufender Wert bereits in Ergebniszelle vorhanden
varNext = Application.Match(tmpA(j), tmpNext, 0)
' wenn nicht vorhanden dann hinzufügen
.Cells(i + 1, 9) = .Cells(i + 1, 9) & ", " & tmpA(j)
End If
End If
Next j
End If
min = 0
max = 0
End If
Next i
End With
End Sub
Beachte folgendes: die einzelnen Begriffe in allen Zellen der Spalte H MÜSSEN durch Komma + Leerzeichen getrennt sein und dürfen selbst kein Leerzeichen enthalten.
Noch ein Tipp am Rande - als Code zum Löschen der Spalte H genügt diese eine Zeile
Range("I2:I118").ClearContents
Bis später
Karin
Link zur Homepage: https://excel-inn.de/