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 Selection.Cells '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
Dieses Makro wandelt die Werte bis zur Zeile 6 richtig um. Danach schmiert Excel ab. Ich habe es mit einer Handvoll Zahlen getestet und Excel ein paar Minuten laufen lassen. Leider hängt es sich, wie gesagt, auf.
und folgenden Code in ein allgemeines Modul einfügen:
Code:
Sub SuchenErsetzen() Dim i As Long Dim lngZ As Long Dim lngEinheit As Long Dim ersatzTab As Range Dim varErgebnis As Variant
Set ersatzTab = Sheets("Stunden").Range("A2:C13")
With Sheets("Tabelle1") .Columns(6).NumberFormat = "General" .Columns(6).NumberFormat = "@" lngZ = .Cells(.Rows.Count, 6).End(xlUp).Row For i = 2 To lngZ If Left(.Cells(i, 6).Value, 5) Like "*#[-]#*" Or .Cells(i, 6).Value Like "#" Or .Cells(i, 6).Value Like "##" Then lngEinheit = Split(.Cells(i, 6), "-")(0) varErgebnis = Application.Match(lngEinheit, ersatzTab.Columns(1), 0) If IsNumeric(varErgebnis) Then .Cells(i, 6).Value = ersatzTab.Cells(varErgebnis, 2).Value End If End If Next i End With End Sub