Zeitintervalle aus zwei Tabellen abgleichen

Von: , 18.06.2010 22:21 Uhr


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ß

6 Antworten zu dieser Frage

  1. Antwort von nach 19 Stunden 0 hilfreich
    Re: Zeitintervalle aus zwei Tabellen abgleichen

    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:D22").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 < Urlaub Ende
    If Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPStart) >= Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart) And 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, IntUEnde).Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = iIntCol
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    End If

    'Fall Projekt geht in den Urlaub: Projekt Start < Urlaub Start UND Projekt Ende > Urlaub Start
    If Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPStart) <= Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart) And Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPEnde) >= 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 Start UND Projekt Ende > Urlaub Ende
    If Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPStart) <= Worksheets(Tabellenblatt1).Cells(iIntZeileUrlaub, IntUStart) And Worksheets(Tabellenblatt2).Cells(iIntZeileProjekt, IntPEnde) >= 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

    • Antwort von nach einem Tag 0 hilfreich
      Re^2: Zeitintervalle aus zwei Tabellen abgleichen

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

      Gruß

      • Antwort von nach einem Tag 0 hilfreich
        Re^3: Zeitintervalle aus zwei Tabellen abgleichen


        Gerne!
        Freut mich dass es geht!

        Gruß

    • Antwort von nach 2 Tagen 0 hilfreich
      Re: Zeitintervalle aus zwei Tabellen abgleichen

      Hallöchen

      also mit Formeln geht das nicht, da hast Du Recht. Aber mit Makros ist das keine große Sache :) 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) <= range("Tab2!E" & tmp1) Then Konflikt = Konflikt & "Urlaub Zeile " & tmp2 & " <> Projekt Zeile " & tmp1 & vbCrLf
      Next
      Next
      If Len(Konflikte) = 0 Then Konflikte = "Keine Konflikte" Else Konflikte = "Konflikte:" & vbCrLf & Konflikte
      MsgBox Konflikte
      End Sub

  2. Antwort von nach 3 Tagen 0 hilfreich
    Re: Zeitintervalle aus zwei Tabellen abgleichen

    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

    • Antwort von nach 4 Tagen 0 hilfreich
      Re^2: Zeitintervalle aus zwei Tabellen abgleichen

      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

      Jetzt auf diese Frage antworten.