manes schrieb am 20.March.2019, 11:36:40 in der Kategorie pc.software
Excel 2016: Formatproblem
Hallo
Auf meiner Arbeitsstelle hatten wir vor etlichen Jahren mal ein Excel-Problem, das man mit einer Array-Formel ganz gut lösen konnte. Das Problem war allerdings, dass der eine oder andere User mit der Eingabe dieser Formel etwas überfordert war, zum einen, weil es eine Array-Formel war, und zum anderen, weil sie auch sonst komplex war.
Zu der Zeit gabe es einen Strategiewechsel. Künftig haben wir komplexere Formeln jeweils als (allein vom Namen her) gut verständliche, benutzerdefinierte Funktionen bereit gestellt.
Das vorliegende Problem, bei dem man z.B. aus 6,25 dann 6:25 machen musste, ist auch bei uns aufgetreten. Wir haben das seinerzeit mit sowas gelöst:
Public Function Dez2Zeit(Dezimalwert)
    Application.Volatile
    Dim int_h As Integer
    Dim int_m As Integer
    If IsNumeric(Dezimalwert) Then
        int_h = Int(Dezimalwert)
        int_m = (Dezimalwert - int_h) * 100
        
        Dez2Zeit = TimeSerial(int_h, int_m, 0)
    Else
        Dez2Zeit = CVErr(2001)
    End If
End Function
Diese Funktion könnte bei der Variante mit der Hilfsspalte eingesetzt werden. Die müsste dann natürlich als Uhrzeit formatiert werden.
Public Sub UmwandelnDez2Zeit()
    Dim r As Range
    Dim c As Range
    Dim str_NU As String
    Dim str_Msg As String
    Dim var_Zeit As Variant
    Set r = Application.InputBox("Zellbereich für Umwandlung)", "Umwandlung Dez 2 Zeit", Selection.Address, , , , , 8)
    For Each c In r.Cells
        var_Zeit = Dez2Zeit(c.Value)
        If VarType(var_Zeit) <> vbError Then
            c = var_Zeit
            c.NumberFormat = "[h]:mm"
        Else
            str_NU = str_NU & c.Address & ","
        End If
    Next
    If str_NU <> "" Then
        str_NU = Left(str_NU, Len(str_NU) - 1)
        str_Msg = "In den folgenden Zellen konnte keine Umwandlung erfolgen:" & vbCr & vbCr & str_NU & _
                  "Sollen diese Zellen markiert werden?"
        If MsgBox(str_Msg, vbYesNo) = vbYes Then
            Range(str_NU).Select
        End If
    End If
End Sub
Hiermit wird übrigens 25,3 in 25:30 umgewandelt. 7,9 wird allerdings in 8:30 umgewandelt. So ein Wert kam jedoch in den Quelldaten nie vor.
Vielleicht kannst Du damit was anfangen
FFPX
Manes