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, 21:38 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2018, 21: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, 10:49 (Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2018, 12:04 von Kuwer.)
(19.12.2018, 09: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