Excel Funktionen in VBA nutzen - ich verzweifle
27.08.2015 18:15:15
Stefan
Bin neu hier und .. Anfänger mit VBA. Aber dank eurer Hilfe, komme ich schon sehr weit.
Nun zu meinem Problem. Ich musste, abhängig von Arbeitsbeginn und Arbeitsende
(z.B. 01:00 - 5:00) herausfinden, wieviel Stunden davon in einem Zeitbereich gearbeitet wurden (z.B. 00:00 - 4:00). In diesem Beispiel wäre die Lösung 3 Std.
Ich habe auch eine Lösung im Internet gefunden die funktioniert
Hier die Lösung die ich in Excel einsetze
=RUNDEN((MAX(;1-MAX(A32;F31)+MAX(;G31-A32)+MIN(B32;G31)+(B32>F31)*(B32-F31)-(A32 B32)-A32))*(A32B32)*(F31G31))*24;2)
A32 = Beginn_Arbeit = 01:00
B32 = Ende_Arbeit = 05:00
F31 = Bereich_Von = 00:00
G31 = Bereich_Bis = 04:00
Da ich aber mit dem zurückgegebenen Wert noch andere Dinge berechnen muss, wird die Formelzeile in Excel immer länger. Also habe ich Hilfsspalten eingesetzt.
Lange Rede kurzer Sinn, ich hatte keine Lust mehr auf Hilfsspalten, und habe versucht, die obige Formel als Funktion in VBA umzusetzen.
Die Funktion heisst:
StundenEnthalten(Beginn_Arbeit, Ende_Arbeit, Bereich_Von, Bereich_Bis As Double) As Double
Damit ich nicht alles neu schreiben muss, dachte ich mir, ich verwende die gleiche Funktion, innerhalb meiner Funktion, die Excel auch benutzt.
Hier meine Funktion:
'Anfang----------------------------------------------------
Public Function StundenEnthalten(Beginn_Arbeit, Ende_Arbeit, Bereich_Von, Bereich_Bis As Double) _
As Double
Dim dEnthaltene_Stunden As Double
With WorksheetFunction
Enthaltene_Stunden = .Round((.Max(0, 1 - .Max(Beginn_Arbeit, Bereich_Von) + .Max(0, Bereich_Bis _
- _
Beginn_Arbeit) + .Min(Ende_Arbeit, Bereich_Bis) + (Ende_Arbeit > Bereich_Von) * _
(Ende_Arbeit - Bereich_Von) - (Beginn_Arbeit Ende_Arbeit) - Beginn_Arbeit)) * _
_
(Beginn_Arbeit Ende_Arbeit) * (Bereich_Von Bereich_Bis)) * 24, 2)
StundenEnthalten = dEnthaltene_Stunden
End With
End Function
'Ende----------------------------------------------------Aber ... egal was ich tue. Meine Funktion liefert nicht denselben Wert zurück
wie die Formel, die ich in Excel benutze.
Ich habe den Variablentyp auf Variant oder Range geändert (Übergabewerte), ich habe direkt den Zellwert ausgelesen (.Value), ich habe ohne Übergabewerte gearbeitet, und die gleichen Dezimalzahlen innerhalb der Funktion benutzt, die mir auch Excel in der Tabelle anzeigt (4 konstante Zahlenwerte innerhalb der Funktion). Hat alles nichts gebracht.
Ich weiss aber nicht wieso.
Was mache ich falsch ?
Grüße aus Berlin
Stefan