Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1256to1260
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Chronologische Liste aus Datumsfeldern

Chronologische Liste aus Datumsfeldern
erwin_geer
Hallo Excel / VBA Spezialisten,
ich habe eine Mitarbeiterliste in der verschiedene Namen (Spalten A und B) und dazugehörige Termine (Spalten H bis L) eingetragen sind.
Die Überschrift zu den Spalten sind in Zeile 1, darunter die Daten bis Zeile 500.
Ich möchte nun eine Liste mit allen maßgeblichen Datumsfeldern aus H2 bis L500 chronologisch geordnet, die in der Zukunft liegen; außerdem sollte der Name des Mitarbeiters aus Spalte A + B und die dazugehörige Überschrift ausgegeben werden, am besten auf einem neuen Tabellenblatt.
Zum besseren Verständnis habe ich eine Beispielsdatei hochgeladen.
https://www.herber.de/bbs/user/79793.xlsx
Wer kann mir hierzu bitte ein Makro basteln, das die Liste erzeugt?
Vielen Dank schon mal für euere Mühe
Erwin

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

Betreff
Benutzer
Anzeige
AW: aber na klar ... ;-) THX
14.04.2012 08:17:13
erwin_geer
Guten Morgen Matthias,
schon so früh wach und gleich ins Forum :)
Super passt genau.
Herzlichen Dank
Erwin
Kleiner Nachtrag ...
14.04.2012 16:23:48
Matthias
Hallo
... so brauchst Du den Code nicht immer anpassen.
Ersetze bitte diese CodeZeile
For Each RnG In .Range("C2:C6")
durch die CodeZeile
For Each RnG In .Range("C2:C" & .Cells(Rows.Count, 3).End(xlUp).Row) 'Schleife bis Ende Spalte(C)
Gruß Matthias
Nochmalige Nachfrage wegen Code
15.04.2012 16:42:37
erwin_geer
Hallo Zusammen bzw. hallo Matthias,
nachdem ich deinen Code in die Originaldatei eingebaut habe und es seit 1 1/2 Tagen nicht schaffe, ihn richtig zum laufen zu bringen, muss ich hier nochmals posten (ich hoffe es ist richtig, dass ich keinen neuen Thread aufmache).
Originaldatei:
https://www.herber.de/bbs/user/79807.xlsm
In der Originaldatei gibt es jede Menge leere Zellen, da ich gerade erst dabei bin, die Personalliste zu erstellen bzw. zu vervollständigen.
Ich habe festgestellt, dass der Code nicht läuft, sobald er auf zwei leere Zellen hintereinander (?) kommt oder in Spalte 16 nichts steht.
Sub aktive_MA_einlesen()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim RnG As Range, loletzte&, MyCol&
On Error GoTo ErrScreen
Set wksQuelle = Worksheets("Mitarbeiter")
Set wksZiel = Worksheets("Termine")
Application.ScreenUpdating = False
wksZiel.Range("A2:D10000").ClearContents 'Zielbereich leeren - Ende evtl. anpassen
With wksQuelle
For Each RnG In .Range("F5:F10000")
If RnG = "A" Then
loletzte = wksZiel.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Spalte(B) in Termine für Name
'hier Spaltenschleife wg. Datum von Spalte ... bis Spalte ....
For MyCol = 16 To 28 '= Date Then
wksZiel.Cells(loletzte, 1) = CDate(.Cells(RnG.Row, MyCol))
wksZiel.Cells(loletzte, 2) = .Cells(RnG.Row, 2)
wksZiel.Cells(loletzte, 3) = .Cells(RnG.Row, 3)
wksZiel.Cells(loletzte, 4) = .Cells(4, MyCol)
loletzte = wksZiel.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Spalte(B) in Termine für  _
Name
End If
Next
End If
Next
End With
wksZiel.Range("D2:D10000").WrapText = False 'Umbruch entfernen
'1.nach Datum sortieren - 2.nach Name sortieren
'wksZiel.Columns("A:D").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2"),  _
Order2:=xlAscending, Header:=xlGuess
ErrScreen:
Application.ScreenUpdating = True
End Sub
Ziel ist es nach wie vor, jeden Termin von Spalte 16 bis 28, der in der Zukunft liegt, mit dem Namen und Kommentar zu versehen auf auf einem gesonderten Tabellenblatt zu kopieren und zu sortieren.
Mit meinen wenigen Kenntnissen kann ich das leider nicht anpassen / lösen.
Grüße Erwin
Anzeige
AW: Nochmalige Nachfrage wegen Code
15.04.2012 20:54:41
fcs
Hallo Erwin,
du muss eine zusätzliche Prüfung einbauen, in der die Zelle in den Spalten auf Datum geprüft werden.
Für die Einfügezeile im Zielblatt kann man die Startzeile setzen und dann immer um 1 erhöhen.
In deiner auskommentierten Sortieranweisung waren Fehlerquellen eingebaut.
Gruß
Franz
Sub aktive_MA_einlesen()
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim RnG As Range, loletzte&, MyCol&
On Error GoTo ErrScreen
Set wksQuelle = Worksheets("Mitarbeiter")
Set wksZiel = Worksheets("Termine")
Application.ScreenUpdating = False
'Zielbereich leeren - Ende evtl. anpassen
With wksZiel
loletzte = .Cells(.Rows.Count, 2).End(xlUp).Row
If loletzte >= 2 Then
.Range(.Cells(2, 1), .Cells(loletzte, 4)).ClearContents
End If
loletzte = 1 'Zeile unterhalb der die Daten eingetragen werden sollen
End With
With wksQuelle
For Each RnG In .Range(.Cells(5, 6), .Cells(.Rows.Count, 6).End(xlUp))
If RnG = "A" Then
'hier Spaltenschleife wg. Datum von Spalte ... bis Spalte ....
For MyCol = 16 To 28
If IsDate(.Cells(RnG.Row, MyCol)) Then
If CDate(.Cells(RnG.Row, MyCol).Text) >= Date Then
loletzte = loletzte + 1
If loletzte > wksZiel.Rows.Count Then
MsgBox "Zieltabelle ist voll", vbInformation + vbOKOnly, _
"Makro - aktive_MA_einlesen"
GoTo ErrScreen
End If
wksZiel.Cells(loletzte, 1) = CDate(.Cells(RnG.Row, MyCol).Text)
wksZiel.Cells(loletzte, 2) = .Cells(RnG.Row, 2)
wksZiel.Cells(loletzte, 3) = .Cells(RnG.Row, 3)
wksZiel.Cells(loletzte, 4) = .Cells(4, MyCol)
End If
End If
Next
End If
Next
End With
With wksZiel
.Columns(4).WrapText = False 'Umbruch entfernen
'1.nach Datum sortieren - 2.nach Name sortieren
With .Range(.Cells(1, 1), .Cells(loletzte, 4))
.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("B1"), Order2:=xlAscending, Header:=xlYes
End With
.Activate
End With
ErrScreen:
Application.ScreenUpdating = True
End Sub

Anzeige
Danke
15.04.2012 21:34:34
erwin_geer
Hallo Franz,
supertoll, jetzt passt es auch auf meine richtige Datei.
Danke
Erwin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige