Hallo Tung,
nur zwei Beispieldatensätze sind natürlich herzlich wenig. Gibts denn die Termine nur zur vollen Stunde oder kann auch ein Termin um 11:25 bzw. 13:19 stattfinden? Sind die Spalten im Textfile wirklich durch 5 bzw. 4 Leerzeichen getrennt oder erfolgt die Trennung anders? Und woher weißt du eigentlich um welche Woche es sich handelt? Kann der Kalender auch Wochenübergreifend sein, also z.B. zwei verschiedene Dienstage haben?
Mit VBA kann man da schon etwas machen. Im Prinzip müsste der Code dafür dann in etwa so aussehen. Probier ihn aus. Natürlich musst du die Variablen entsprechend anpassen.
Option Explicit
Sub Kalender()
Dim Überschrift As Boolean, Datei As Variant, Terminzeile As String
Dim Tag As String, Zeit As String, Termin As String
Dim BegZeit As Long, BegTermin As Long, spa As Long, zei As Long, sh As Worksheet, cl As Range
BegZeit = 8 'die Uhrzeit beginnt am 8. Zeichen. und ist 5 Zeichen lang.
BegTermin = 17 'Der Termin beginnt am 17. Zeichen und kann unterschiedlich lang sein.
Überschrift = False 'True wenn die erste Zeile im textfile Spaltenüberschriften enthält.
Datei = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Datei = False Then End
Set sh = Sheets.Add
sh.Range("B1:H1") = Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")
Open Datei For Input As #1
zei = 1
Do While Not EOF(1)
Line Input #1, Terminzeile
If Überschrift = False Then
Tag = Left(Terminzeile, 2)
Zeit = Trim(Mid(Terminzeile, BegZeit, 5))
Termin = Trim(Right(Terminzeile, Len(Terminzeile) - BegTermin + 1))
spa = sh.Range("B1:H1").Find(Tag).Column
Set cl = sh.Range("A:A").Find(Zeit)
If cl Is Nothing Then
zei = zei + 1
Cells(zei, 1) = Zeit
Else
zei = cl.Row
End If
If Cells(zei, spa).Value = "" Then Cells(zei, spa).Value = Termin Else Cells(zei, spa).Value = Cells(zei, spa).Value & ", " & Termin
Überschrift = False
End If
Loop
Close #1
sh.UsedRange.Sort Key1:=sh.UsedRange.Range("A:A"), Header:=xlYes 'sortiert die Uhrzeiten aufsteigend
End Sub
Gruß Mr. K.
|