Clever-Excel-Forum

Normale Version: Suchen und Ersetzen mit Makro möglich?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
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

ABC
1EinheitBeginnEnde
2107:4508:30
3208:3509:20
4309:2510:10
5410:1511:00
6511:0511:50
76
87
98
109
1110
1211
1312

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
Seiten: 1 2 3