Somma di numeri del tipo Ore,Minuti

di il
36 risposte

Somma di numeri del tipo Ore,Minuti

Buogiorno a tutti, sono qui con un ulteriore problema, credo di essermi cacciato in un ginepraio. Vi spiego tutto in estremo dettaglio.  Dopo tanti sforzi da parte mia e preziosi aiuti ottenuti su questo forum sono riuscito ad ottenere un risultato di questo tipo:

Cioè  nella colonna Ore è presente un numero la cui parte intera sono le ore e la cui parte decimale sono i minuti. Cioè 9,5 sono 9 ore e 5 minuti e così via. Il codice utilizzato è il seguente:

 Int(DateDiff("n",OraEntrata,OraUscita)/60)& "," & DateDiff("n",OraEntrata,OraUscita) Mod 60 AS Ore

Il problema sorge quando faccio la somma delle ore relative ad un dipendente. In pratica sulla base di questa query ho costruito un report con i vari raggruppamenti per dipendente utilizzando la funzione somma, però un tipico risultato è il seguente:

Ovviamente questa somma è sbagliata, perché dovrebbe dare 10,5, cioè 10 ore e 5 minuti. Come ho pensato di risolvere: sommo la parte intera e la parte decimale utilizzando Int, ma in questo modo avrei risultati del tipo 9,20+1,70=10,90, cioè 10 ore e 90 minuti, anziché 11,30, cioè 11 ore e 30 minuti.

Esiste qualche combinazione di funzioni di Access che possono risolvere questo problema oppure bisogna fare una function? Grazie a tutti.

36 Risposte

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - Nat ha scritto:


    Cioè  nella colonna Ore è presente un numero la cui parte intera sono le ore e la cui parte decimale sono i minuti. Cioè 9,5 sono 9 ore e 5 minuti e così via. Il codice utilizzato è il seguente:

     Int(DateDiff("n",OraEntrata,OraUscita)/60)& "," & DateDiff("n",OraEntrata,OraUscita) Mod 60 AS Ore

    Ciao,

    iniziamo con il dire che la formula, non so da dove l'hai presa, è sbagliata !!!  ;))

    dalle ore 07:15 alle 16:20 non sono 9,5  (che corrisponderebbero a 9 ore e 50 minuti) 

    ma deve essere 9,05 (che corrispondono a 9 ore e 5 minuti)

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - By65Franco ha scritto:


    31/05/2023 - Nat ha scritto:


    Cioè  nella colonna Ore è presente un numero la cui parte intera sono le ore e la cui parte decimale sono i minuti. Cioè 9,5 sono 9 ore e 5 minuti e così via. Il codice utilizzato è il seguente:

     Int(DateDiff("n",OraEntrata,OraUscita)/60)& "," & DateDiff("n",OraEntrata,OraUscita) Mod 60 AS Ore

    Ciao,

    iniziamo con il dire che la formula, non so da dove l'hai presa, è sbagliata !!!  ;))

    dalle ore 07:15 alle 16:20 non sono 9,5  (che corrisponderebbero a 9 ore e 50 minuti) 

    ma deve essere 9,05 (che corrispondono a 9 ore e 5 minuti)

    Santo cielo, ho dimenticato CDbl: in questo modo ottengo:

    Ecco il codice che ti stesso mi avevi suggerito;

    CDbl(Int(DateDiff("n",OraEntrata,OraUscita)/60) +  (DateDiff("n",OraEntrata,OraUscita) Mod 60)/100) AS Ore
  • Re: Somma di numeri del tipo Ore,Minuti

    ;))  no , manca qualcosa e non va bene l'espressione:

    SELECT Tbl_Orari.IdOre, Tbl_Orari.OraStart, Tbl_Orari.OraEnd, CDbl(Int(DateDiff("n",[OraStart],[OraEnd])/60)+(DateDiff("n",[OraStart],[OraEnd]) Mod 60)/100) AS nOre
    FROM Tbl_Orari;

    la conversione in Double puoi anche non metterla… 

    Verifica bene i risultati, fai i test, io mi sono accorto trasformando questa espressione in una funzione come ti avevo fatto vedere. 
    In sostanza: quando utilizzi Mod per prendere il resto della Divisione, lavori con un numero intero… a questo punto lo dividi per 100 e si ottengono i decimali da sommare alle ore.


    P.S. certo che chi ti ha passato la formula non ci ha capito proprio nulla ;D  ahahahahahahaaahahahahaha

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - By65Franco ha scritto:


    ;))  no , manca qualcosa e non va bene l'espressione:

    SELECT Tbl_Orari.IdOre, Tbl_Orari.OraStart, Tbl_Orari.OraEnd, CDbl(Int(DateDiff("n",[OraStart],[OraEnd])/60)+(DateDiff("n",[OraStart],[OraEnd]) Mod 60)/100) AS nOre
    FROM Tbl_Orari;

    la conversione in Double puoi anche non metterla… 

    Verifica bene i risultati, fai i test, io mi sono accorto trasformando questa espressione in una funzione come ti avevo fatto vedere. 

    P.S. certo che chi ti ha passato la formula non ci ha capito proprio nulla ;D  ahahahahahahaaahahahahaha

    Ehhhh, però ricordo che ieri non c'era quel diviso 100, e nemmeno la +… infatti non mi trovavo, poi ora riguardandola per postarla mi sono accorto di questo, allora ora tutto funziona. Grazie come al solito sei grande!

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - Nat ha scritto:


    Ehhhh, però ricordo che ieri non c'era quel diviso 100, e nemmeno la +… infatti non mi trovavo, poi ora riguardandola per postarla mi sono accorto di questo, allora ora tutto funziona. Grazie come al solito sei grande!

    Bene  :)) … adesso come immaginavo devi ottenere una somma di queste ore/minuti… 

    Come nel primo post di ieri dove ti segnalavo che era necessario trasformare tutto in minuti per ottenere il totale Ore e Minuti, anche in questo caso devi fare la stessa operazione.

    La parte intera del numero indicano le ore e le moltiplichi per 60 per ottenere i minuti
    La parte decimale del numero indicano i minuti e questi li aggiungi alle ore trasformate in minuti
    A questo punto il totale minuti così ottenuto lo trasformi in ore e minuti

    Esempio: se hai ore 9,05 minuti  e  ore 2,30 minuti

    (11 * 60) + 35 = Tot.Minuti 

    Adesso trasformi il Tot.Minuti in Ore e Minuti.

  • Re: Somma di numeri del tipo Ore,Minuti

    Scusami31/05/2023 - By65Franco ha scritto:


    31/05/2023 - Nat ha scritto:


    Ehhhh, però ricordo che ieri non c'era quel diviso 100, e nemmeno la +… infatti non mi trovavo, poi ora riguardandola per postarla mi sono accorto di questo, allora ora tutto funziona. Grazie come al solito sei grande!

    Bene  :)) … adesso come immaginavo devi ottenere una somma di queste ore/minuti… 

    Come nel primo post di ieri dove ti segnalavo che era necessario trasformare tutto in minuti per ottenere il totale Ore e Minuti, anche in questo caso devi fare la stessa operazione.

    La parte intera del numero indicano le ore e le moltiplichi per 60 per ottenere i minuti
    La parte decimale del numero indicano i minuti e questi li aggiungi alle ore trasformate in minuti
    A questo punto il totale minuti così ottenuto lo trasformi in ore e minuti

    Esempio: se hai ore 9,05 minuti  e  ore 2,30 minuti

    (11 * 60) + 35 = Tot.Minuti 

    Adesso trasformi il Tot.Minuti in Ore e Minuti.

    Scusami, non posso fare la somma e basta? Se faccio solo la somma in quali sono i possibili errori?

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - By65Franco ha scritto:


    31/05/2023 - Nat ha scritto:


    Ehhhh, però ricordo che ieri non c'era quel diviso 100, e nemmeno la +… infatti non mi trovavo, poi ora riguardandola per postarla mi sono accorto di questo, allora ora tutto funziona. Grazie come al solito sei grande!

    Bene  :)) … adesso come immaginavo devi ottenere una somma di queste ore/minuti… 

    Come nel primo post di ieri dove ti segnalavo che era necessario trasformare tutto in minuti per ottenere il totale Ore e Minuti, anche in questo caso devi fare la stessa operazione.

    La parte intera del numero indicano le ore e le moltiplichi per 60 per ottenere i minuti
    La parte decimale del numero indicano i minuti e questi li aggiungi alle ore trasformate in minuti
    A questo punto il totale minuti così ottenuto lo trasformi in ore e minuti

    Esempio: se hai ore 9,05 minuti  e  ore 2,30 minuti

    (11 * 60) + 35 = Tot.Minuti 

    Adesso trasformi il Tot.Minuti in Ore e Minuti.

    Si, ho capito, mi resta un ultimo passo cioè faccio così:

    Int(Sum(Ore))*60+(Sum(Ore)-Int(Sum(Ore)))

    Questo mi da la somma dei minuti. Per ottenere Ore,minuti, cosa devo fare? Dvido per 60?

  • Re: Somma di numeri del tipo Ore,Minuti

    A me non pare complicato ricavare hh:mm dal valore in Minuti… mi sembra banale matematica…!!!!!

    hh=minuti\60
    mm=minuti-hh*60
    
    Risultato=hh & ":" & mm

    Attenzione al segno di divisione… non è il normale diviso ma il BackSlash che esegue la divisione e prende l'intero…

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - @Alex ha scritto:


    A me non pare complicato ricavare hh:mm dal valore in Minuti… mi sembra banale matematica…!!!!!

    hh=minuti\60
    mm=minuti-hh*60
    
    Risultato=hh & ":" & mm

    Attenzione al segno di divisione… non è il normale diviso ma il BackSlash che esegue la divisione e prende l'intero…

    Così è quasi risolto ma c'è ancora qualcosa che non va.

    =(Int(Somma([Ore]))*60+(Somma([Ore])-Int(Somma([ore])))*100)/60

    Il problema non è la matematica, è scrivere la matematica con Access!

  • Re: Somma di numeri del tipo Ore,Minuti

    In pratica devi semplificare questo tipo di operazioni… come ti ha fatto vedere @Alex

    Devi ricavare dalla somma dei vari orari il totalone dei minuti 
    e ricavare da esso quante ore si sono accumulate e quanti minuti

    Poi dipende dove devi eseguire il calcolo, se a totale di un report/form/Vba etc…. per ogni contesto dovrai avere certe informazioni e trattarle di conseguenza.

  • Re: Somma di numeri del tipo Ore,Minuti

    31/05/2023 - Nat ha scritto:


    Il problema non è la matematica, è scrivere la matematica con Access!

    E' più facile in access… hai più funzioni da sfruttare che ti semplificano i calcoli.

    Poi la matematica sempre quella è… ;)

  • Re: Somma di numeri del tipo Ore,Minuti

    Nat,
    non comprendo (visti i vari suggerimenti forniti) le difficoltà che hai a scrivere la matematica con Access, 
    Si tratta di implementarli sfruttando proprio quanto indicato. 
    Ipotizziamo di avere una tabella (tblOrario) con i campi ID, Ingresso, Uscita ove questi ultimi due sono del tipo "Data/ora"  con formato "Data generica" in modo da avere il dato (della data ed ora) presentato, ad esempio, come "30/05/2023 21:25:59".
    Per ottenere l'intervalllo come differenza fra Ingresso ed Uscita si impiega la funzione DateDiff con il parametro “n” per esprimerla in minuti (IntervalloInMinuti) quindi si applicano le formule presentate da Alex per avere il medesimo dato ma espresso in numero ore (NrOre) e numero dei minuti (NrMinuti).
    Praticamente una query similare:

    SELECT tblOrario.ID, tblOrario.Ingresso, tblOrario.Uscita, 
    DateDiff("n", [Ingresso], [Uscita]) AS IntervalloInMinuti, 
    [IntervalloInMinuti]\60   AS NrOre, 
    [IntervalloInMinuti]-([NrOre]*60)  AS NrMinuti
    FROM tblOrario;

    che produce questo esempio:

    IDIngressoUscitaIntervalloInMinutiNrOreNrMinuti
    130/05/2023 21:25:5931/05/2023 01:45:40260420
    230/05/2023 22:10:4331/05/2023 00:28:50138218
    330/05/2023 23:55:0131/05/2023 00:49:5054054
    431/05/2023 03:45:0731/05/2023 05:49:5012424
    531/05/2023 06:00:0731/05/2023 10:00:5324040
    631/05/2023 08:10:0731/05/2023 14:16:5936666
    QueryOrario

    Quindi nel report si tratta di applicare i medesimi criteri (calcolare il totale quale sommatoria degli intevalli in minuti e la presentazione del dato nelle due ripartizioni (NrOre e NrMinuti)

  • Re: Somma di numeri del tipo Ore,Minuti

    Per i minuti basta usare il modulo 60

  • Re: Somma di numeri del tipo Ore,Minuti

    NAAAAAAAATTTTTTTTTTTTTTT ! ! ! ! ! 

    ma che è tutto questo fumo ?   stai surriscaldando i circuiti con le mille valvole ???!!!???  ;))

    Hai fatto il calcolo ?

    Ma poi dove lo devi esporre il risultato finale? Quali dettagli e quali riepiloghi ti occorrono come risultato finale da esporre?


    Intanto famme aprì sta finestra… ce stà un sacco de fumo , che combini ?!?  ;))

    (scherzo!)

Devi accedere o registrarti per scrivere nel forum
36 risposte