=werktijd functie

Status
Niet open voor verdere reacties.

Interface

Gebruiker
Lid geworden
27 jan 2009
Berichten
156
Voor het berekenen van de netto werktijd(dus bruto tijd - pauze), maak ik gebruik van een functie.

Nu wil ik graag deze functie uitbreiden, dit door middel van een pauze matrix waarin cel a1 een begintijd van de pauze en in cel a2 de eindtijd van de pauze en in cel 3 de duur van de pauze. De tijdnotatie die ik gebruik is bijvoorbeeld: 07.00-18.15.

In het onderstaande script wat ik gebruik voor de formule staat er in de if < dan een bepaalde tijd(in het voorbeeld: 10) en > dan een bepaalde tijd(in het voor beeld: 10). Deze tijden wil ik ophalen uit cel a1 en a2

Als er in de tijd 10 voorkom of 12.5 of 15 of 18 dan wordt er bij pause wat opgeteld. Deze waarde wil ik ophalen uit cel a3.

Is dit uberhaupt mogelijk? Ik heb e.a. al geprobeerd maar er wordt bij pause niks opgeteld(dus doe ik het declareren niet goed zou je zeggen, maar ik heb nu alle soorten gegevenstypen geprobeerd en het niks werkt?!), en kan de functie eenvoudiger? In het onderstaande de functie zoals deze altijd werdt gebruikt en voldeed.

Function convert(time As String)
Dim uren As Integer
uren = Left(time, Len(time) - 3)
convert = uren + 0.01 * (Right(time, 2) / 0.6)
End Function

Function werktijd(Dagen As Range)
Dim uren
uren = 0
pauze=0
For Each cel In Dagen
If Not IsEmpty(cel.Value) Then
begin = convert(CStr(Left(cel.Value, 5)))
eind = convert(CStr(Right(cel.Value, 5)))
uren = uren + (eind - begin)
If begin < 10 And eind > 10 Then pause = pause + 0.25
If begin < 12.5 And eind > 12.5 Then pause = pause + 0.5
If begin < 15 And eind > 15 Then pause = pause + 0.25
If begin < 18 And eind > 18 Then pause = pause + 0.25
End If
Next
werktijd = uren - pause
End Function
 
Laatst bewerkt:
Voorbeeld Bestandje

Na mijn eerdere vraag even doorgelezen te hebben, kan ik begrijpen dat e.a. onduidelijk is.

In de bijlage een voorbeeld bestand met daarin een voorbeeld van wat ernu preciess moet gebeuren. Ik heb de waarde die in de macro staan een kleurtje meegegeven en de waarde zoals deze in de functie(VBA script in het werkblad) staan dezelfde kleur gegeven. De kleur moet dus opgehaald worden uit de pauze matrix zodat deze verrekend worden met het script van de VBA code voor het berekenen van de netto werktijd.

Ik hoop echt dat iemand mij duidelijkheid kan geven of ik het wel goed aanpak en misschien wel makkelijker en/of beter kan doen.
 

Bijlagen

Is dit uberhaupt mogelijk? Ik heb e.a. al geprobeerd maar er wordt bij pause niks opgeteld(dus doe ik het declareren niet goed zou je zeggen, maar ik heb nu alle soorten gegevenstypen geprobeerd en het niks werkt?!)

Dat je het declareren niet goed doet, is niet het enige. Je doet het gewoon niet... :eek:

En in de pauzematrix, die .75 betekent dus 3 kwartier? En de 16.30 is dan weer half 5, niet 30 / 100 van een uur (18 minuten)?

M.a.w.: het inbrengen van gegevens op deze manier is vragen om problemen, Excel rekent met getallen, niet met teksten. Gevolg is dat jij nu code moet gaan schrijven om toch maar te kunnen rekenen met de teksten...

Wigi
 
Zoiets dan misschien.

Code:
Function werktijd(Dagen As Range) As Double

'==============================
'   Wim Gielis
'   http://www.wimgielis.be
'==============================

    Dim uren As Double
    Dim begin As Double
    Dim eind As Double
    Dim pause As Double
    Dim cel As Range
    Dim r As Range
    
    For Each cel In Dagen
        If Not IsEmpty(cel.Value) Then
            begin = convert(Left(cel.Value, 5))
            eind = convert(Right(cel.Value, 5))
            uren = uren + (eind - begin)
            
            For Each r In Range("C14:C17")
            
                If begin < convert(r.Offset(0, 1).Text) And eind > convert(r.Offset(0, 2).Text) Then
                    pause = pause + (convert(r.Offset(0, 2).Text) - convert(r.Offset(0, 1).Text))
                End If
            
            Next
            
        End If
    Next
    
    werktijd = uren - pause
    
End Function

Function convert(time As String) As Double
    convert = Left(time, Len(time) - 3) + 0.01 * (Right(time, 2) / 0.6)
End Function

Function converttostring(werktijd As Double) As String
    converttostring = Format(Int(werktijd), "##") & "." & Format((werktijd - Int(werktijd)) * 60, "00")
End Function

Zie bijlage.

In het vervolg ook code tags gebruiken op het forum als je code plaats.

Wigi
 
Wow.

Bedankt Wigi, ik zal voortaan code tags gebruiken.

Wat betreft het declareren. Ik heb geprobeerhet geheel te delcareren echter gebeurde er vervolgens niks. Maar ik ben ook neit zo capabel met Vba als jij:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan