Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1748to1752
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

Zeiträume in horiz.Kalender übertragen

Zeiträume in horiz.Kalender übertragen
02.04.2020 21:04:54
Constantin
Hallo,
zur folgender Problemstellung bräuchte ich etwas Nachhilfe: Ich möchte Zeiträume (ähnlich wie bei einem Urlaubskalender) in einen horizontalen Kalender übertragen. Dazu habe ich eine Mappe mit den Tabellenblättern "Quelle" und "Ziel".
Das Tabellenblatt Quelle enthält in Spalte A Projektnummern, z.B. 4721, und in den Spalten C und D das Start- und Enddatum. In Spalte E steht die Maßnahme, z.B. "ABC". Nun soll die Projektnummer im Blatt "Ziel" gesucht werden und "ABC" in jeden Tag des Kalenders eintragen werden, wenn sie in diesem Zeitraum liegen.
Sollte der Kalender nicht alle Zeiträume vollständig abdecken, soll er eben nur bis zum Ende gefüllt werden.
Ich habe einen Ansatz gefunden in einem Forum; er ist mir allerdings nicht so verständlich, als dass ich ihn hätte anpassen können (http://www.office-loesung.de/ftopic294692_0_0_asc.php; die Datei ließ sich ebenfalls z.Zt. nicht herunterladen.
Im Voraus vielen Dank für Tipps oder Unterstützung.
https://www.herber.de/bbs/user/136363.xlsx
Grüße, Constantin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
mehrere INDEX /VERGLEICH
02.04.2020 21:58:52
WF
Hi,
schreib in D2 von Ziel:
=WENN(D$1>INDEX(Quelle!$D:$D;VERGLEICH($A2;Quelle!$A:$A;0));"";WENN(D$1>=INDEX(Quelle!$C:$C; VERGLEICH($A2;Quelle!$A:$A;0));INDEX(Quelle!$E:$E;VERGLEICH($A2;Quelle!$A:$A;0));""))
nach rechts und runter kopieren
WF
Du hast nicht geschrieben, was bei den roten Daten in Ziel passieren soll ?
AW: mehrere INDEX /VERGLEICH
03.04.2020 07:05:43
Constantin
Hallo WF,
vielen Dank für die Formellösung (werde ich bestimmt mal einsetzen!). Für diesen Zweck sollte es eine VBA-Lösung sein. Auch der Hinweis zu den farbigen Datumswerten (Wochenende/Feiertage) ist wichtig. Wenn keine Aktivität stattfindet, werde ich diese Einträge darunter nachträglich löschen, so mein Ansatz.
Wie könnte hier eine VBA-Routine anstelle einer Formellösung aussehen?
Grüße, Constantin
Anzeige
AW: mehrere INDEX /VERGLEICH
04.04.2020 08:35:07
Constantin
Hallo,
ich habe versehentlich den Thread nicht als offen markiert. Für meine Problemstellung - Zeiträume in einen (horizontalen) Kalender übertragen - suche ich nach einer VBA-Lösung.
Vielleicht hat jemand eine Idee.
Danke und Grüße, Constantin
AW: mehrere INDEX /VERGLEICH
04.04.2020 11:13:32
Hajo_Zi
Du hattest ein XLSX Datei hochgeladen, also wolltest Du ein VBA freie Lösung.
das geht nicht, da eine XLSX Datei kein Makro enthalten kann.
Ich sehe keinen Grund eine Datei 2x zu speichern und den Code einzufügen.
Ich führe keine Liste unter welchem Dateinamen ich die Datei aus dem Forum gespeichert habe.
Der Name steht ja im Beitrag.

Anzeige
AW: mehrere INDEX /VERGLEICH
04.04.2020 14:05:17
Constantin
Hallo Hajo,
Danke für Deine Rückmeldung. Die Datei habe ich jetzt als xlsm hochgeladen (meinte mal gelesen zu haben, dass xlsm-Dateien im Forum als Upload nicht so gern gesehen sind, deswegen nur als xlsx vorher). Richtig, hätte ich anmerken sollen, dass es VBA sein sollte.
Grüße, Constantin
https://www.herber.de/bbs/user/136401.xlsm
AW: mehrere INDEX /VERGLEICH
04.04.2020 15:28:30
Hajo_Zi
Hallo Constatin,
ich habe nur die erste Zeile getestet und überprüft.

Option Explicit
Sub Uebertragen()
Dim LoLetzte As Long
Dim LoI As Long
Dim RaFound As Range
Dim LoAnfang
Dim LoEnde
With Worksheets("Quelle")
LoLetzte = IIf(IsEmpty(.Cells(Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
For LoI = 2 To LoLetzte
Set RaFound = Worksheets("Ziel").Columns(1).Find(.Cells(LoI, 1), _
.Range("A1"), , xlPart, , xlNext)
' xlPart enthalten
' xlWhole kompletter Vergleich
If Not RaFound Is Nothing Then
LoAnfang = Application.Match(.Cells(LoI, 3), Worksheets("Ziel").Rows(1), 0)
LoEnde = Application.Match(.Cells(LoI, 4), Worksheets("Ziel").Rows(1), 0)
If Not IsError(LoAnfang) Or Not IsError(LoEnde) Then
With Worksheets("Ziel")
' vorhandene löschen
.Range(.Cells(RaFound.Row, 2), _
.Cells(RaFound.Row, 16384)).ClearContents
.Range(.Cells(RaFound.Row, LoAnfang), _
.Cells(RaFound.Row, LoEnde)) = Worksheets("Quelle").Cells(LoI, 5)
End With
Else
MsgBox "Datum nicht gefunden"
End If
End If
Next LoI
End With
End Sub

Anzeige
funktioniert - Danke!
04.04.2020 16:00:11
Constantin
Hallo Hajo,
das Programm funktioniert super-gut! Eine Kleinigkeit werde ich noch reinbringen, wenn ich z.B. mit dem Enddatum außerhalb des Kalender-Zeitraums liege. Das sollte ich aber selber hinbekommen.
Du hast mir sehr geholfen. Vielen Dank.
Grüße, Constantin
AW: funktioniert - Danke!
04.04.2020 16:41:52
Hajo_Zi
Hallo Constatin,
ungestetet.
Option Explicit
Sub Uebertragen()
Dim LoLetzte As Long
Dim LoI As Long
Dim RaFound As Range
Dim LoAnfang
Dim LoEnde
With Worksheets("Quelle")
LoLetzte = IIf(IsEmpty(.Cells(Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count)
For LoI = 2 To LoLetzte
Set RaFound = Worksheets("Ziel").Columns(1).Find(.Cells(LoI, 1), _
.Range("A1"), , xlPart, , xlNext)
' xlPart enthalten
' xlWhole kompletter Vergleich
If Not RaFound Is Nothing Then
LoAnfang = Application.Match(.Cells(LoI, 3), Worksheets("Ziel").Rows(1), 0)
LoEnde = Application.Match(.Cells(LoI, 4), Worksheets("Ziel").Rows(1), 0)
If Not IsError(LoAnfang) Or Not IsError(LoEnde) Then
With Worksheets("Ziel")
' vorhandene löschen
.Range(.Cells(RaFound.Row, 2), _
.Cells(RaFound.Row, 16384)).ClearContents
.Range(.Cells(RaFound.Row, LoAnfang), _
.Cells(RaFound.Row, LoEnde)) = Worksheets("Quelle").Cells(LoI, 5)
End With
ElseIf IsError(LoAnfang) Or IsError(LoEnde) Then
With Worksheets("Ziel")
LoLetzte = IIf(IsEmpty(.Cells(1, .Columns.Count)), Cells(1, _
.Columns.Count).End(xlToLeft).Column, .Columns.Count)
' vorhandene löschen
.Range(.Cells(RaFound.Row, 2), _
.Cells(RaFound.Row, 16384)).ClearContents
.Range(.Cells(RaFound.Row, LoAnfang), _
.Cells(RaFound.Row, loletze)) = Worksheets("Quelle").Cells(LoI, 5)
End With
Else
MsgBox "Datum nicht gefunden"
End If
End If
Next LoI
End With
End Sub
Gruß Hajo
Anzeige
AW: funktioniert - Danke!
06.04.2020 13:15:29
Constantin
Hallo Hajo,
vielen Dank für die Erweiterung. Läuft zwar nicht ganz durch, aber ich versuche, Deinen Ansatz der Fallunterscheidung zu übernehmen (ich probiere noch). Die allermeisten Termine liegen im Zeitraum und laufen somit tadellos durch. Vielleicht werde ich die Terminliste separat durchgehen und die Sonderfälle abhandeln (geht in den Kalenderzeitraum hinein, geht über den Kalenderzeitraum hinaus oder beginnt vorher und endet nachher).
Aber das Programm ist bis jetzt schon eine Superlösung für mich.
Vielen Dank.
Grüße, Constantin

200 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige