HERBERS Excel-Forum - das Archiv
Funktion Dezimal -> Zeit/ Variablen-Deklaration
Mike

Guten Tag zusammen,
ich habe eine Funktion erstellt, die Dezimalzahlen in das Zeitformat bringen soll.
Problem: deklariere ich die Funktion als Variant, wird zwar die korrekte Zeit angezeigt, aber als Text (linksbündig); deklariere ich hingegen als Date, dann wird zwar die korrekte Zahl angezeigt, allerdings ohne Format.

Public Function Minuten(Zahl As Variant) As Date <- diese Deklaration verändere ich. Dim D As Variant D = (Zahl / 24 / 60) Minuten = Format(D, "hh:mm:ss") End Function


Hat vielleicht jemand eine Idee, was ich falsch mache?
Besten dank für die Mühe und viele Grüße
Mike E.

AW: Funktion Dezimal -> Zeit/ Variablen-Deklaratio
Peter

Servus,
definiere als Double und weiße das Format zu wo du es brauchst nicht in der Function (siehe unten).

Public Function Minuten(Zahl As Variant) As Double '<- diese Deklaration verändere ich. Dim D As Variant D = (Zahl / 24 / 60) Minuten = D 'Format(D, "hh:mm:ss") End Function


Sub t()
MsgBox Format(Minuten(12), "hh:mm:ss")
End Sub



Tabelle1
 A
100:12:00
2Zelle Formatiert als Uhrzeit
Formeln der Tabelle
A1 : =minuten(12)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
MfG
Peter

AW: Funktion Dezimal -> Zeit/ Variablen-Deklaratio
Mike

Hallo Peter,
danke für Deine Mühe.
Ist man denn generell schlecht beraten, das Format in die Funktion zu integrieren? Denn: eine weitere Funktion, mit der ich drei Zellen verkette, um daraus ein Datum zu machen funktioniert mit der Formatierung als "DD.MM.YY" und ist auch tatsächlich ein Datum.
Beste Grüße von
Mike E.

AW: Funktion Dezimal -> Zeit/ Variablen-Deklaration
Jürgen

Hallo Mike,
Du machst Dir das Leben zu schwer. Wenn Du das Ergebnis im Arbeitsblatt brauchst, verwendest Du einfach die Funktion "Zeit(Stunde;Minute;Sekunde)", die es Dir auch nicht übel nimmt, wenn für Minuten ein Wert größer 60 eingegeben wird. In VBA macht "Timeserial" das gleiche.
In Deiner Funktion kommt es zu den unerwarteten Ergebnissen, weil Du Dich nicht konsequent genug dafür entschieden hast, was sie zurückliefern soll. Ein Zeit / Datumsausdruck? Dann solltest Du die Funktion "As date" deklarieren und die Formatierung dort vornehmen, wo die Zahl benötigt wird (also Zellformat oder in VBA: Format(Minute(1234), "hh:mm:ss").
Wenn Du die Funktion als Variant deklarierst, bekommst Du einen Text zurück, weil "Format(D, "hh:mm:ss") einen String zurückliefert, der (anders als bei einer Funktionsdeklaration "as Date") nicht mehr einer automatischen Typkonvertierung unterzogen wird.
Gruß, Jürgen

AW: Funktion Dezimal -> Zeit/ Variablen-Deklaratio
Mike

Hallo Jürgen,
das ergibt für meine Datenbasis leider durchaus Sinn... ;-)
Aber: vielen Dank für Deine Erklärung. Diese hat mich weitergebracht und wird mir bei der nächsten Funktion gewiss die Arbeit erleichern.
Dir und Peter W. meinen besten Dank und ein ungemein entspanntes Wochenende!
Es grüßt
Mike E.