Hi,
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.
Hallo,
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.
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.
Hallo Warrender,
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
[
attachment=21429]
Gruß Uwe
Schau mal jetzt. Kopiere dir den Link und trag in ein. Bei mir geht es.
Hallo Franke,
auch wenn die Seite wie eine Hilfeseite aussah: der Hinweis auf eine Kaufversion zum Sonderpreis ist Werbung und in diesem Forum nicht erlaubt.
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.
Hallo Warrender,
teste mal 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)
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
Gruß Uwe
Danke, das Makro bricht noch immer bei einer leeren Zelle ab.
(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
Gruß Uwe