annähernd alles
13.02.2016 18:29:19
Michael
Hi Erik,
ich muß echt gestört sein, daß ich mir das "Bitgepfriemel" antue, aber gut, es ist interessanter als Sudokus...
Für die Spalte H sieht es nun so aus:
Function vonbisH(a1#, a2#, b1#, b2#) As Variant
' Formel aus
' http:// _
www.herber.de/forum/archiv/636to640/639927_Zeitueberschneidungen.html
vonbisH = WorksheetFunction.Max(0, WorksheetFunction.Min(b1, b2) - _
WorksheetFunction.Min(WorksheetFunction.Max(a1, a2), b1))
End Function
Function rechH(s As Variant, istSa As Variant) As Variant
Dim zarr#(1 To 10), znr&, z$, b$, w#, w2#
Dim p&
Const SaVon = 13, SaBis = 21
If InStr(istSa.Text, "Sa") > 0 And Len(s) > 3 Then
s = Replace(s, " ", "+")
s = Replace(s, ",", ".") & "!"
znr = 0
For p = 1 To Len(s)
b = Mid(s, p, 1)
If (b >= "0" And b 0 Then
znr = znr + 1
zarr(znr) = Val(z)
z = ""
End If
End If
Next
If (znr And 1) = 1 Then rechH = "#UNG": Exit Function
' falls Anzahl der Zeiten ungerade, Fehlermeldung "#UNG" und Ende
w2 = 0
For p = 1 To znr - 1 Step 2
w2 = w2 + vonbisH(zarr(p), SaVon, zarr(p + 1), SaBis)
Next
rechH = w2
Else
rechH = ""
End If
End Function
SaVon und SaBis wurden als Konstanten "zentral" definiert, das erleichtert etwaige Änderungen.
Allerdings kommt in G22 nicht 9, sondern richtig: 21 - 13 = 8 raus...
Die Datei: https://www.herber.de/bbs/user/103529.xlsm
(auf "März" stellen nicht vergessen)
Die verbleibende Spalte F machste nun aber wirklich selbst: im Prinzip brauchst Du ja nur die Differenz aus I und D zu nehmen, in einem geeigneten WENN.
Schöne Grüße,
Michael
P.S.: man könnte mal mit 10000 Datensätzen vergleichen, ob die "händische" Berechnung (in der Datei enthält rechH auskommentierte Teile, die die selbe Berechnung wie das evaluate machen und in Variable w stecken) schneller ist als das evaluate...