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

Forumthread: Daten in Abhängigkeit eines Datums auslesen

Daten in Abhängigkeit eines Datums auslesen
26.11.2008 13:15:11
Robert
Hallo,
ich hab ein Problem - bin mit meinem Latain am Ende und hoffe ihr könnt mir helfen...
In Tabelle2 soll, basierend auf der Datumseingabe einer Auflistung der Mitarbeiter erfolgen, die an diesem Tag abwesend sind (Tabelle1). Zusätzlich zu jedem abwesenden Mitarbeiter soll ausgegeben werden, wann die Abwesenheit endet oder wann der erste Arbeitstag nach der Abwesenheit ist.
Zur besseren Veranschaulichung gleich Beispielmappe:
https://www.herber.de/bbs/user/57146.xls
Ich danke euch schon mal im Voraus.
Viele Grüße Robert
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in Abhängigkeit eines Datums auslesen
26.11.2008 15:50:00
fcs
Hallo Robert,
das lässt sich per Formel meines Wissens nicht mehr so ohne weiteres lösen.
Deshalb mein Vorschlag die Liste per Makro zu erstellen.
Denke daran, dass Excel 2003 "nur" 255 Spalten zur Verfügung hat.
Du kannst allso nicht alle Tage eines Jahres in einer Tabelle unterbringen.
Wenn du weniger als 255 Mitarbeiter verwalten willst, dann ist es ggf. besser, die Mitarbeiternamen in den Spalten und die Kalendertage in den Zeilen einzugeben.
Das Makro muss man dann auch entsprechend komplett umstellen.
Gruß
Franz

Sub Fehlt()
Dim wksDaten As Worksheet
Dim wksFehlt As Worksheet
Dim datDatum As Date
Dim lngFehlt As Long 'Zeilenzähler im Blatt wksFehlt
Dim lngData As Long 'Zeilenzähler im Blatt wksDaten
Dim SpalteTag As Long 'Spalte des gsuchten Datums
Dim lngSpalte As Long 'Spaltenzähler
'Konstanten für Zeilen und Spalten im Fehlt-Blatt
Const TitelFehlt As Long = 7 'Zeile mit Titeln
Const SpNameFehlt As Long = 2 'Spalte mit Namen
'Konstanten für Zeilen und Spalten im Daten-Kalender Blatt
Const ZeileDatum As Long = 3 'Zeile mit Datum
Const SpalteJan1 As Long = 7 'Spalte mit 1. Januar
Const SpalteName As Long = 4 'Spalte mit Namen
Const ZeileName1 As Long = 5 '1. Zeile mit Namen
Set wksDaten = Worksheets("Tabelle1")
Set wksFehlt = Worksheets("Tabelle2")
With wksFehlt
'Altdaten unterhalb Titelzeile löschen
.Range(.Rows(TitelFehlt + 1), _
.Rows(.Cells(TitelFehlt + 1, 2).End(xlDown).Row)).ClearContents
datDatum = .Range("F1") 'Stichtag
lngFehlt = TitelFehlt 'Zeile mit Spaltentiteln
End With
With wksDaten
'Spalte mit gewünschtem Datum in Zeile 3 ermitteln
For lngSpalte = SpalteJan1 To .Cells(ZeileDatum, .Columns.Count).End(xlToLeft).Column
If .Cells(ZeileDatum, lngSpalte).Value = datDatum Then
SpalteTag = lngSpalte
Exit For
End If
Next
If SpalteTag = 0 Then
MsgBox "Datum " & datDatum & " nicht gefunden im Blatt " & .Name
GoTo Beenden
End If
'Spalte mit Mitarbeiternamen abarbeiten
For lngData = ZeileName1 To .Cells(.Rows.Count, SpalteName).End(xlUp).Row
'Eintrag des Mitarbeiters für den Tag prüfen
Select Case .Cells(lngData, SpalteTag).Value
Case "K", "F", "U" 'Einträge die als Fehlt gelten
lngFehlt = lngFehlt + 1
'Namen ins Fehlt-Blatt eintragen
wksFehlt.Cells(lngFehlt, SpNameFehlt).Value = .Cells(lngData, SpalteName).Value
'1. Arbeitstag nach Fehlt-Tag ermitteln
For lngSpalte = SpalteTag To .Cells(ZeileDatum, .Columns.Count).End(xlToLeft).Column
Select Case .Cells(lngData, lngSpalte).Value
Case "K", "F", "U" 'Einträge die als Fehlt gelten
'do nothing, fehlt weiterhin
Case ""
'Prüfen auf Sa oder So
If Weekday(.Cells(ZeileDatum, lngSpalte)) = vbSaturday Or _
Weekday(.Cells(ZeileDatum, lngSpalte)) = vbSunday Then
'do nothing
'Prüfen auf Feiertag an Hand er Zellfarbe
ElseIf .Cells(lngData, lngSpalte).Interior.ColorIndex = 45 Then
'Feiertag
'do nothing
Else
'Datum in Fehlt-Blatt eintragen
wksFehlt.Cells(lngFehlt, SpNameFehlt + 1).Value = _
.Cells(ZeileDatum, lngSpalte).Value
Exit For
End If
Case Else
'Arbeitet wieder, anderer Eintrag der nicht als fehlt gilt
'Datum in Fehlt-Blatt eintragen
wksFehlt.Cells(lngFehlt, SpNameFehlt + 1).Value = _
.Cells(ZeileDatum, lngSpalte).Value
End Select
Next
Case Else
'anderere Einträge der nicht als fehlt gilt
'do nothing
End Select
Next
End With
Beenden:
End Sub


Anzeige
AW: Daten in Abhängigkeit eines Datums auslesen
26.11.2008 18:07:00
Robert
Hallo Franz,
das Problem mit den 255 Spalten habe ich inzwischen gelöst, indem ich für je eine Jahreshälfte eine Tabelle angelegt habe. Ist zwar nicht das tollste...aber anders gehts nicht (für Mitarbeiter bräuchte ich noch mehr Spalte)
Dein Makro funktioniert soweit astrein und das Ergebnis ist genau das richtige :-)
Danke Dir vielmals.
Muss nur noch schauen, dass ich das mit den zwei Jahreshälften irgendwie in dein Makro bekomme...
Gruß Robert
Anzeige
AW: Daten in Abhängigkeit eines Datums auslesen
26.11.2008 18:25:00
Robert
Muss feststellen, dass meine VBA-Kenntnisse wirklich bescheiden sind ;-)
Schaffe es nicht...
Glaube ich muss eine Kalenderreform einführen - 182 Tage pro Jahr müssen reichen...
AW: Daten in Abhängigkeit eines Datums auslesen
27.11.2008 09:57:00
fcs
Hallo Robert,
ich hab mal in deiner Datei ensprechend 2 Halbjahre eingebaut. Etwas diffiziel war hierbei der Übergang von Juni auf Juli bei Fehltagen am 30.06.
https://www.herber.de/bbs/user/57172.xls
Um die Funktion des Makros etwas sicherer zu machen solltest du die Feiertage mit einem Zelleintrag kennzeichnen. Ich hab hierzu in Zeile 4 jeweils "FT" unterhalb des Datums eingetragen.
Insgesamt kann man beim Datum und Formatierungen noch ein paar Verbesserungen einbauen, die die Anpassung der Liste an ein neues Kalenderjahr vereinfachen.
Gruß
Franz
Anzeige
AW: Daten in Abhängigkeit eines Datums auslesen
28.11.2008 09:24:52
Robert
Hallo Franz,
sorry dass ich mich erst jetzt melde.
Hab inzwischen deine Datei bewundern dürfen. Ist ja genial!!
Vielen vielen Dank
Gruß Robert
AW: Daten in Abhängigkeit eines Datums auslesen
26.11.2008 20:06:00
rofu
hallo,
könntest du damit arbeiten?
müsste noch ausgebaut werden, aber zum probieren genügt es.
gruß
rofu
https://www.herber.de/bbs/user/57167.xls
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Daten in Abhängigkeit eines Datums auslesen


Schritt-für-Schritt-Anleitung

Um Daten in Abhängigkeit eines Datums aus einer Excel-Tabelle auszulesen, kannst du die folgende Schritt-für-Schritt-Anleitung nutzen. Diese Anleitung bezieht sich auf Excel 2003, aber die grundlegenden Konzepte sind auch auf neuere Versionen anwendbar.

  1. Öffne deine Excel-Datei mit den Mitarbeiterdaten (Tabelle1) und erstelle eine neue Tabelle (Tabelle2) für die Abwesenheitsliste.
  2. Erstelle ein Makro:
    • Öffne den VBA-Editor (Alt + F11).
    • Füge ein neues Modul hinzu und kopiere den folgenden VBA-Code hinein:
Sub Fehlt()
    Dim wksDaten As Worksheet
    Dim wksFehlt As Worksheet
    Dim datDatum As Date
    Dim lngFehlt As Long 'Zeilenzähler im Blatt wksFehlt
    Dim lngData As Long 'Zeilenzähler im Blatt wksDaten
    Dim SpalteTag As Long 'Spalte des gesuchten Datums
    Dim lngSpalte As Long 'Spaltenzähler
    'Konstanten für Zeilen und Spalten im Fehlt-Blatt
    Const TitelFehlt As Long = 7 'Zeile mit Titeln
    Const SpNameFehlt As Long = 2 'Spalte mit Namen
    'Konstanten für Zeilen und Spalten im Daten-Kalender Blatt
    Const ZeileDatum As Long = 3 'Zeile mit Datum
    Const SpalteJan1 As Long = 7 'Spalte mit 1. Januar
    Const SpalteName As Long = 4 'Spalte mit Namen
    Const ZeileName1 As Long = 5 '1. Zeile mit Namen
    Set wksDaten = Worksheets("Tabelle1")
    Set wksFehlt = Worksheets("Tabelle2")
    With wksFehlt
        .Range(.Rows(TitelFehlt + 1), _
        .Rows(.Cells(TitelFehlt + 1, 2).End(xlDown).Row)).ClearContents
        datDatum = .Range("F1") 'Stichtag
        lngFehlt = TitelFehlt 'Zeile mit Spaltentiteln
    End With
    With wksDaten
        'Spalte mit gewünschtem Datum in Zeile 3 ermitteln
        For lngSpalte = SpalteJan1 To .Cells(ZeileDatum, .Columns.Count).End(xlToLeft).Column
            If .Cells(ZeileDatum, lngSpalte).Value = datDatum Then
                SpalteTag = lngSpalte
                Exit For
            End If
        Next
        If SpalteTag = 0 Then
            MsgBox "Datum " & datDatum & " nicht gefunden im Blatt " & .Name
            GoTo Beenden
        End If
        'Spalte mit Mitarbeiternamen abarbeiten
        For lngData = ZeileName1 To .Cells(.Rows.Count, SpalteName).End(xlUp).Row
            Select Case .Cells(lngData, SpalteTag).Value
            Case "K", "F", "U" 'Einträge die als Fehlt gelten
                lngFehlt = lngFehlt + 1
                wksFehlt.Cells(lngFehlt, SpNameFehlt).Value = .Cells(lngData, SpalteName).Value
                '1. Arbeitstag nach Fehlt-Tag ermitteln
                For lngSpalte = SpalteTag To .Cells(ZeileDatum, .Columns.Count).End(xlToLeft).Column
                    Select Case .Cells(lngData, lngSpalte).Value
                    Case "K", "F", "U"
                    Case ""
                        If Weekday(.Cells(ZeileDatum, lngSpalte)) = vbSaturday Or _
                        Weekday(.Cells(ZeileDatum, lngSpalte)) = vbSunday Then
                        ElseIf .Cells(lngData, lngSpalte).Interior.ColorIndex = 45 Then
                        Else
                            wksFehlt.Cells(lngFehlt, SpNameFehlt + 1).Value = _
                            .Cells(ZeileDatum, lngSpalte).Value
                            Exit For
                        End If
                    Case Else
                        wksFehlt.Cells(lngFehlt, SpNameFehlt + 1).Value = _
                        .Cells(ZeileDatum, lngSpalte).Value
                    End Select
                Next
            Case Else
            End Select
        Next
    End With
Beenden:
End Sub
  1. Füge in Zelle F1 das gewünschte Datum ein, für das du die Abwesenheiten auslesen möchtest.
  2. Führe das Makro aus (F5 oder über das Menü) und überprüfe die Ergebnisse in Tabelle2.

Häufige Fehler und Lösungen

  • Fehler: Datum nicht gefunden

    • Lösung: Stelle sicher, dass das Datum in Zelle F1 genau mit einem Datum in Zeile 3 von Tabelle1 übereinstimmt.
  • Fehler: Keine Abwesenheiten angezeigt

    • Lösung: Überprüfe die Markierungen für Abwesenheiten (K, F, U) in Tabelle1, um sicherzustellen, dass sie korrekt eingegeben sind.

Alternative Methoden

Solltest du kein Makro verwenden wollen, kannst du auch mit Excel-Formeln arbeiten, um die Abwesenheiten auszulesen. Zum Beispiel könntest du die WENN-Funktion zusammen mit SVERWEIS oder INDEX und VERGLEICH verwenden, um die Daten dynamisch zu erhalten.

Ein Beispiel könnte so aussehen:

=WENN(SVERWEIS(F1;Tabelle1!A$1:D$100;2;FALSCH)="K";"Abwesend";"Anwesend")

Praktische Beispiele

  1. Mitarbeiterliste aufbauen: Du kannst die Mitarbeiter in Tabelle1 auflisten und die Abwesenheiten für verschiedene Monate sammeln.
  2. Kalender erstellen: Nutze eine Tabelle, um die Monate und die entsprechenden Abwesenheiten visuell darzustellen.

Tipps für Profis

  • Verwende Named Ranges: Das erleichtert die Verwaltung deiner Daten und macht deine Formeln übersichtlicher.
  • Automatisierung: Kombiniere dein Makro mit einem Button in Excel für eine einfachere Benutzeroberfläche.
  • Testen: Teste dein Makro regelmäßig, insbesondere nach Änderungen an den Daten, um sicherzustellen, dass alles korrekt funktioniert.

FAQ: Häufige Fragen

1. Was mache ich, wenn ich mehr als 255 Mitarbeiter habe? Du kannst für jedes Halbjahr eine separate Tabelle anlegen, um die Daten zu verwalten.

2. Wie kann ich Feiertage in meinem Makro berücksichtigen? Kennzeichne Feiertage in einer separaten Zeile oder Spalte in Tabelle1, sodass das Makro diese Einträge ignorieren kann.

3. Funktioniert das Makro in neueren Excel-Versionen? Ja, das Makro kann auch in neueren Versionen von Excel verwendet werden, aber einige Anpassungen könnten notwendig sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige