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