ho un problemino con il calcolo delle ore, anzi dei minuti. Il problema sta nel fatto che quando faccio calcoli su pochissimi minuti, ci sono troppi decimali e non so quale tipo di variabile usare. Mi sa che non è chiaro e quindi mi spiego meglio con un esempio:
Ho creato una funzione che calcola se ho diritto al buono pasto in base alle ore lavorate; la regola è che ho diritto al buono pasto se lavoro almeno 7 ore e 42 minuti, salvo alcune eccezioni.
I parametri che passo alla funzione sono semplicemente gli orari di entrata e di uscita e un codice che mi serve per le eccezioni (ad esempio 1=permesso retribuito, 2=permesso da recuperare, 3=Straordinario, ecc.).
Il valore restituito è 1 o 0.
Se faccio più di 7.42 ore la funzione restituisce correttamente 1, mentre se ne faccio di meno, restituisce correttamente 0.
Ma se ne faccio esattamente 7,42 restituisce 0 e non 1 come dovrebbe (almeno nelle mie intenzioni...). Secondo me il problema sta nel tipo di variabile:
ho provato con double, single, decimal ma sempre con risultati errati
Questa è la funzione:
- Codice: Seleziona tutto
Function Ticket(Entr As Double, Usc As Double, Cod As Byte) As Byte
Dim TL As Double '----->TL = Totale ore Lavorate
TL = (Usc - Entr)
If TL >= Foglio1.Range("b10").Value Then '-----> nella casella b10 c'è l'orario minimo per avere il buono pasto; 7.42, in formato orario, che VBA interpreta in decimale come 0,320833333333333
Ticket = 1
Else
........ ' -----> qui ci sono le eccezioni alla regola
........
........
End If
End Function
Faccio un esempio pratico
A1 -> 8.15 (entrata)
B1 -> 15.57 (uscita)
C1 -> vuoto (nessun codice)
D1 -> =Ticket(A1;B1;C1) -> il risultato è 0 invece che 1
Con un arrotondamento risolvo (anche se non ho capito perché...) cioè round(Foglio1.Range("b10").Value, 15), ma vorrei sapere se sbaglio qualcosa.
Tengo a precisare che ho creato questa funzione, per inserire anche le varie eccezioni, altrimenti sarebbe bastato un =SE((C1-B1)>=Dati!B10;1;0) che mi dà un risultato corretto
Spero sia tutto chiaro
Grazie