Zeitintervalle aus zwei Tabellen abgleichen

Hallo,

würde gerne meine Tab.1( scheet 1;B2:C22), die Urlaubszeiträume mit Start und Enddatum beinhaltet, mit Tab.2 (scheet 2; D6:E20) , die meine Projektzeiträume mit Start und Enddatum beinhaltet, abgleichen. Ziel sollte es sein Bsp., dass die (alle) Projektzeiten überprüft werden ob sie sich mit irgendeinem Urlaubszeitraum , hier sollte alle Urlaubszeiträume überprüft werden, überschneiden. Wichtig ist, dass man jedes Projekt überprüft. D.h. ein best, Urlaubsintervall soll mit den (allen) Projektintervallen verglichen werden. Wenn bsw. Mit Excel-Formeln komme ich jetzt nach einer Woche nicht weiter. Hoffe ihr könnt mir da mit einem Makro aushelfen.

Gruß

Hallo Eddy,

Hab das Problem gelöst und eine Mappe gebaut!
Kann ich Dir gerne per Email schicken wenn du mir deine gibst!

Gruß Patrick

PS: Hast Du Excel 2003 oder 2007?

Code sieht so aus:

Sub Ueberpuefen()
'(Copyright Patrick Seeger)

Dim iIntZeileUrlaub, iIntZeileProjekt, iIntCol, IntUStart, IntUEnde, IntPStart, IntPEnde, IntUKollision, IntPBeschr As Integer
Dim Tabellenblatt1, Tabellenblatt2 As String

'Name der Tabellenblätter
Tabellenblatt1 = „Scheet1“
Tabellenblatt2 = „Scheet2“
'Entfernt die Farblich Markierten Daten!

Worksheets(Tabellenblatt1).Select
Range(„B2:C22“).Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'Löscht den Bereich der Kollision!
Range(„D2:smiley:22“).Select
Selection.ClearContents

Worksheets(Tabellenblatt2).Select
Range(„D6:E20“).Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With

’ Scheet1: |StartUrlaub: Spalte 2 | EndeUrlaub Spalte 3 |
’ Scheet2: |StartProjekt: Spalte 4 | EndeProjekt Spalte 5 |
iIntCol = 258
'Spalten für die Daten
IntUKollision = 4 'Spalte in der das kollidierende Projekt ausgeworfen wird
IntUStart = 2 'Spalte Urlaub StartDatum
IntUEnde = 3 'Spalte Urlaub EndDatum
IntPBeschr = 3 'Spalte ProjektBeschreibung
IntPStart = 4 'Spalte Projekt StartDatum
IntPEnde = 5 'Spalte Projekt EndDatum

For iIntZeileProjekt = 6 To 20

For iIntZeileUrlaub = 2 To 22
iIntCol = 200
'Fall Urlaub geht in das Projekt: Projekt Start > Urlaub Start UND Projekt Start = Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart) And Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPStart) Urlaub Start
If Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPStart) = Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart) Then
Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUKollision) = "Markiertes Datum kollidiert mit " & (Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPBeschr))
With Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = iIntCol
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
'Fall Urlaub im gesamten Projekt: Projekt Start Urlaub Ende
If Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPStart) = Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUEnde) Then
Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUKollision) = "Markiertes Datum kollidiert mit " & (Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPBeschr))
With Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = iIntCol
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUEnde).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = iIntCol
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If

Next iIntZeileUrlaub

Next iIntZeileProjekt

Worksheets(Tabellenblatt2).Select
Range(„D5“).Select
Worksheets(Tabellenblatt1).Select
Range(„B1“).Select

End Sub

SUPER !!! Läuft wie geschmiert! Bestennnnnnnnnnnnnnnnnnn Dank Patrick.

Gruß

Gerne!
Freut mich dass es geht!

Gruß

Hallöchen

also mit Formeln geht das nicht, da hast Du Recht. Aber mit Makros ist das keine große Sache :smile: Da ich den genauen Aufbau Deiner Tabelle nicht kenne, hier mal der grobe Umriss:
Tab1, Spalte B+C enthalten die Urlaubszeiträume,
Tab2, Spalte D+E enthalten die Projektzeiträume.

Das Makro müsste dann etwa wie folgt aussehen:

Sub CheckDateConflicts()
Dim ProjStr as long, ProjEnd as long
Dim UrlStr as long, UrlEnd as long
Dim tmp1 as long, tmp2 as long
Dim Konflikt as string
ProjStr = 2 'erste Datenzeile der Projekte
ProjEnd = range(„Tab2!D65536“).End(xlUp).Row
UrlStr = 6 'erste Datenzeile der Projekte
UrlEnd = range(„Tab1!B65536“).End(xlUp).Row
Konflikt = „“
For tmp1 = ProjStr to ProjEnd
For tmp2 = UrlStr to UrlEnd
If range(„Tab1!B“ & tmp2) >= range(„Tab2!D“ & tmp1) And range(„Tab1!C“ & tmp2) Projekt Zeile " & tmp1 & vbCrLf
Next
Next
If Len(Konflikte) = 0 Then Konflikte = „Keine Konflikte“ Else Konflikte = „Konflikte:“ & vbCrLf & Konflikte
MsgBox Konflikte
End Sub

Hallo,

Ich hätte noch eine kurze Frage dazu: Wie soll die Ausgabe erscheinen falls es eine Überschneidung gibt: Ein Meldungsfenster, text in einer bestimmten spalte oder ein farbig markiertes Feld( wenn ja welches).

Mit besten Grüßen
namina

Hallo,

ich habe im Internet mal recherchiert und denke, dass dieser Thread dir weiterhilft (Excel-Formel):

http://www.supportnet.de/listthread/162266

In deinem Fall ist der Monat C1 im Beispiel dein Projektstart Datum, somit kannst du die
Urlaubszeiten mit dem Projektstart vergleichen, was ausreichen müsste. Habe es
selber ausprobiert und es funktioniert.

Damit du jedes einzelne Projekt mit allen Urlaubzeiträumen vergleichen kannst, würde ich eine Matrix mit der Formel erstellen. Habe leider keine elegante Makrolösung hierfür.

Bei Bedarf kann ich dir die Exceldatei zuschicken.

Hoffe ich konnte dir weiterhelfen.

Falls du viel mit Zeiten arbeitest bspw. auch mit Kapazitäten von Mitarbeitern, dann empfehle ich dir sehr MS Project zu nutzen.

Gruß

Airhan

Besten Dank an alle.Die Rücklaufquote ist hier echt spitze. Werde mich jetzt mit den bereits gegebenen Lösungen auseinander setzen. Bin sicher hier meine Lösung zu finden.

Besten Dank