da passt aber etwas nicht wirklich zusammen.
In deiner Frage #1 steht 1-3 = 7:45-9:25
deine Datei mit den Werten zeigt aber
1 = 07:35-8:30
3 = 09:25-10:10
Für mich wäre also die Ersetzung dann bei 1 - 3: 7.35 - 10.10
Dein Stundenaufbau ist allerdings suboptimal, da dürfen je Zahl nur ein Zeitwert stehen, sonst müßte das umständlich erst extrahiert werden aus deinen Angaben.
grundsätzlich ist es so, dass man im Prinzip nur genaue Übereinstimmungen vergleichen kann. So ganz habe ich noch nicht verstanden, wo die Reise hingen soll. Beschreibe das bitte mal etwas genauer, gerne auch mit einer Beispieltabelle.
Viele Grüße
Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Ich habe die zweifelhafte Ehre, den Stundenplan für unser Institut zu bauen.
Die Lehrfächerverteilung, also die zugrunde liegende Datenbank mit allen Einträgen (wann, wo, wer), sieht vereinfacht so aus wie die Datei im Anhang.
Bei der Spalte "Einheiten" sollen also jetzt nicht die Einheiten, die es in allen möglichen Kombinationen gibt, stehen, sondern die konkreten Uhrzeiten.
Du brauchst eine separate Tabelle mit den Stunden, auf die dann per SVERWEIS (Vlookup) zugegriffen wird. Im Beispiel in einem zusätzlichen Tabellenblatt.
Stunden
A
B
C
1
Einheit
Beginn
Ende
2
1
07:45
08:30
3
2
08:35
09:20
4
3
09:25
10:10
5
4
10:15
11:00
6
5
11:05
11:50
7
6
8
7
9
8
10
9
11
10
12
11
13
12
Beim Starten des folgenden Makros muss die Tabelle1 aktiv sein:
Code:
Sub EinheitenZuStunden()
Dim rngEinheiten As Range
Dim rngStunden As Range
Dim varEinheten As Variant
Set rngStunden = Worksheets("Stunden").Range("A1").CurrentRegion
Set rngEinheiten = ActiveSheet.Range("A1").CurrentRegion.Columns(6)
For Each rngEinheiten In rngEinheiten.Offset(1).Resize(rngEinheiten.Rows.Count - 1).Cells
varEinheten = Split(rngEinheiten, "-")
rngEinheiten.Value = Format(Application.VLookup(CLng(varEinheten(0)), rngStunden, 2, 0), "hh:nn") & "-" & _
Format(Application.VLookup(CLng(varEinheten(UBound(varEinheten))), rngStunden, 3, 0), "hh:nn")
Next rngEinheiten
End Sub
18.12.2018, 20:38 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2018, 20:38 von Warrender.)
Vielen Dank, Kuwer!
Ich habe das Tabellenblatt "Stunden" angepasst und soweit funktioniert alles recht gut.
Sobald das Skript allerdings eine leere Zeile findet, bricht das Makro ab und wirft bei neuerlichem Start eine Fehlermeldung aus. Gibt es hierfür eine Lösung? Das Auffüllen mit der leeren Zeilen wäre sehr umständlich.
Sub EinheitenZuStunden()
Dim rngEinheiten As Range
Dim rngStunden As Range
Dim varEinheten As Variant
Set rngStunden = Worksheets("Stunden").Range("A1").CurrentRegion
Set rngEinheiten = ActiveSheet.Range("A1").CurrentRegion.Columns(6)
For Each rngEinheiten In rngEinheiten.Offset(1).Resize(rngEinheiten.Rows.Count - 1).Cells
If InStr(1, rngEinheiten.Text, ":") = 0 And Len(rngEinheiten.Text) Then
varEinheten = Split(rngEinheiten, "-")
rngEinheiten.Value = Format(Application.VLookup(CLng(varEinheten(0)), rngStunden, 2, 0), "hh:nn") & "-" & _
Format(Application.VLookup(CLng(varEinheten(UBound(varEinheten))), rngStunden, 3, 0), "hh:nn")
End If
Next rngEinheiten
End Sub
19.12.2018, 09:49 (Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2018, 11:04 von Kuwer.)
(19.12.2018, 08:55)Warrender schrieb: Danke, das Makro bricht noch immer bei einer leeren Zelle ab.
nein, macht es nicht. Vermutlich beinhaltet die vermeintlich leere Zelle Leerzeichen. So geht es auch damit:
Code:
Sub EinheitenZuStunden()
Dim rngEinheiten As Range
Dim rngStunden As Range
Dim varEinheten As Variant
Set rngStunden = Worksheets("Stunden").Range("A1").CurrentRegion
Set rngEinheiten = ActiveSheet.Range("A1").CurrentRegion.Columns(6)
On Error Resume Next
For Each rngEinheiten In rngEinheiten.Offset(1).Resize(rngEinheiten.Rows.Count - 1).Cells
If InStr(1, rngEinheiten.Text, ":") = 0 And Len(rngEinheiten.Text) Then
varEinheten = Split(rngEinheiten, "-")
rngEinheiten.Value = Format(Application.VLookup(CLng(varEinheten(0)), rngStunden, 2, 0), "hh:nn") & "-" & _
Format(Application.VLookup(CLng(varEinheten(UBound(varEinheten))), rngStunden, 3, 0), "hh:nn")
End If
Next rngEinheiten
On Error GoTo 0
End Sub