AW: der nächste Urlaub
11.01.2007 22:13:30
Christoph
Hallo Marion,
das geht bestimmt auch per Formel oder Pivot aber bei dieser Struktur von Tabelle2 bezweifel ich das. Hier ein VBA-Ansatz. Der Code ist nicht besonders elegant, sollte aber bis zu 1000 Datensätze ausreichend sein.
Gruß
Christoph
Option Explicit
Sub GetVacation()
'Eintrag des Urlaubs zu gegebenem Namen in Zeile 10:
Dim wks As Worksheet
Dim i&, j%, blnFnd As Boolean
Set wks = Sheets("Tabelle1")
With Sheets("Tabelle2")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, 1) = wks.Range("A10") Then
For j = 2 To .Cells(i, Columns.Count).End(xlToLeft).Column Step 4
If .Cells(i, j) >= Now Then
blnFnd = True
Exit For
End If
Next
Exit For
End If
Next
wks.Range("B10:C10").ClearContents
If blnFnd Then
wks.Range("B10") = .Cells(i, j)
wks.Range("C10") = .Cells(i, j + 2)
Else
wks.Range("B10") = "kein Eintrag"
End If
End With
End Sub
Sub GetNames()
'Liste der Namen zu gegebenem Datum ab Zeile 26:
Dim wks As Worksheet
Dim i&, j%, k&
Dim datStart As Date
Dim blnFnd As Boolean
Application.ScreenUpdating = False
Set wks = Sheets("Tabelle1")
k = 25
wks.Rows(k + 1 & ":" & wks.Rows.Count).Delete
If Not IsDate(wks.Cells(k, 1)) Then
datStart = Now
Else
datStart = wks.Cells(k, 1)
End If
With Sheets("Tabelle2")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
For j = 2 To .Cells(i, Columns.Count).End(xlToLeft).Column Step 4
If .Cells(i, j) >= datStart Then
blnFnd = True
k = k + 1
wks.Cells(k, 1) = .Cells(i, 1)
wks.Cells(k, 2) = .Cells(i, j)
wks.Cells(k, 3) = .Cells(i, j + 2)
Exit For
End If
Next
Next
If Not blnFnd Then wks.Cells(k + 1, 1) = "kein Eintrag"
End With
Application.ScreenUpdating = True
End Sub