Trasformare numeri decimali, inseriti in campi alfanumerici, in ore e fare la loro somma.

Anonimo
2017-08-31T15:56:06+00:00

Ciao,

grazie al nostro caro Mimmo, qualche giorno fa ho portato a casa una funzione che mi ha aiutato a fare la somma di 31 campi alfanumerici:

Function fnTotaleGiorni(Tabella, Id)

Dim myRst As Recordset

Dim I As Integer

Set myRst = CurrentDb.OpenRecordset("Select * From " & Tabella & " Where Id = " & Id)

myRst.MoveFirst

For I = 1 To 31

      fnTotaleGiorni = fnTotaleGiorni + Val(Nz(myRst("Giorno" & I)))

Next I

myRst.Close

Set myRst = Nothing

End Function

Richiamata nella query, mi fa il totale solo di quei campi al cui interno è presente un numero:

Tot_Ore: fnTotaleGiorni("Anagrafica_Dipendenti";[Id])

Il problema adesso è che avrei bisogno di una somma che mi calcoli le ore.

Cioè, 1.30 + 1.30  mi deve restituire 3 e non 2.6

Come potrei fare?

Vladimiro

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

8 risposte

Ordina per: Più utili
  1. Anonimo
    2017-09-01T11:25:19+00:00

    Prova ad effettuare il calcolo dopo aver effettuato la sommatoria:

    For I = 1 To 31

          fnTotaleGiorni = fnTotaleGiorni + Val(Nz(myRst("Giorno" & I)))

    Next I

    ====> fnTotaleGiorni= Int(fnTotaleGiorni) + CCur(fnTotaleGiorni - Int(fnTotaleGiorni))*100 / 60

    myRst.Close

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-09-01T11:09:56+00:00

    Ciao

    >>Basta scindere i numeri interi con i decimali; è qui che mi serve l'aiuto.

    Prova con

         Int(Num) 

    e

         Num - Int(Num)

    Mimmo

    Ciao Mimmo,

    siccome non ho il computer davanti non posso provare... però, che bella pensata!

    Comunque, il problema che chiedevo era quello, si di scindere i numeri, che avrei comunque potuto fare in diversi modi, ma della difficoltà del costrutto alll'interno della tua Function. E' li che (indirettamente) chiedevo aiuto. :-)

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-09-01T10:40:15+00:00

    Ciao

    >>Basta scindere i numeri interi con i decimali; è qui che mi serve l'aiuto.

    Prova con

         Int(Num) 

    e

         Num - Int(Num)

    Mimmo

    '--------------------------------------'

    P.s. Ho provato con:

    Int(Val("123.45"))  

    Val("123.45")) - Int(Val("123.45"))   

    se necessario:

    CCur(Val("123.45")) - Int(Val("123.45")))

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-09-01T08:19:26+00:00

    Ciao Vladimiro,

    penso debba trasformare tutto in minuti e quindi in ore e minuti.

    1*60 + 30 + 1*60 +30 = 180 / 60 = 3

    Ciao Mimmo

    Ciao Mimmo,

    Il discorso è semplice.

    Basta scindere i numeri interi con i decimali; è qui che mi serve l'aiuto.

    Ua volta fatto questo si fa la somma dei numeri interi:

    1+1=2

    Si fa la somma dei decimali più la trasformazione in minuti:

    0,30 + 0,30 * 100 ÷ 60 = 1

    2 + 1= 3

    In questo caso il resto è 0.

    Nel caso  in cui la somma dei decimali dovesse rilasciare altri decimali, si dovranno moltiplicare i suddetti decimali x 60

    Cioè,

    Risultato,Mod 60

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-09-01T06:50:31+00:00

    Ciao Vladimiro,

    penso debba trasformare tutto in minuti e quindi in ore e minuti.

    1*60 + 30 + 1*60 +30 = 180 / 60 = 3

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento