calcolo fasce orarie



  • calcolo fasce orarie
    di GiancaG (utente non iscritto) data: 17/05/2013 16:49:06

    ciao a tutti
    ho questo problema
    devo calcolare il numero delle ore di una determinata fascia oraria in un arco ti tempo
    es:
    la fascia a va dalle ore 06.00 alle ore 22.00
    la fascia b va dalle ore 00.00 alle ore 06.00 e dalle ore 22.00 alle ore 06.00
    la fascia c che sarebbe il festivo va dalle 00.00 alle 24.00

    se per esempio l'orario è dalle 15.00 alle 23.00
    dovremo avere 7 ore in fascia a e 1 ora in fascia b totale delle ore 8
    oppure se l'orario va dalle 04.00 alle 23.00
    dovremo avere 3 ore in fascia b e 16 in fascia a
    ma dovrei tenere conto del orario a cavallo della mezzanotte, dei festivi e dei prefestivi
    es:
    festivo orario dalle 23 alle 07.00 del giorno dopo
    vanno calcolati dalle 23.00 alle 24.00 in fascia c
    dalle 00.00 alle 06.00 in fascia b e dalle 06.00 alle 07.00 in fascia a
    prefestivo orario dalle 23 alle 07.00 del giorno dopo
    vanno calcolati dalle 23.00 alle 24.00 come il feriale in questo caso fascia b
    dalle 00.00 alle 07.00 in fascia c festivo
    qualcuno può darmi una mano...?
    grazie in anticipo



  • di mandoz (utente non iscritto) data: 17/05/2013 21:45:40

    ciao
    hai già un qualcosa che funziona solo in parte
    puoi postare qualcosa da cui partire
    sarebbe più facile capire cosa c'è che non va



  • di giancag (utente non iscritto) data: 17/05/2013 22:00:01

    si certo è allegato..



  • di GiancaG (utente non iscritto) data: 17/05/2013 22:05:14

    ciao...
    nel file allegato sto facendo alcune prove con dei cicli...
    sinceramente non so se sia la strada giusta...
    sono riuscito a compilare un codice ke mi fa solo il conteggio in feriale
    ora devo vedere come farlo in festivo e prefestivo



  • di mandoz (utente non iscritto) data: 17/05/2013 22:23:18

    hai pensato ad usare solo/anche le formule
    con qualche colonna in più si può fare



  • di gianca (utente non iscritto) data: 17/05/2013 22:26:42

    si ho fatto alcune prove ma
    formule + date son per me deleterie....



  • di Gianca (utente non iscritto) data: 17/05/2013 23:01:07

    ho modificato il file....
    come posso cancellare quelli già inseriti per poi inserire quest'ultimo?



  • di Vecchio Frac data: 18/05/2013 10:53:19

    Gli allegati inseriti non si possono cancellare.
    Ci pensa il sistema a eliminare gli allegati dopo tre giorni dal loro inserimento.





  • di Gianca (utente non iscritto) data: 18/05/2013 17:35:07

    ok allora aspetto....



  • di mandoz (utente non iscritto) data: 19/05/2013 12:20:35

    ciao.
    ho accennato un qualcosina. dimmi cosa ne pensi
    il layout è tutto da rivedere. manca la parte festiva
    se è il caso proseguiamo



  • di Gianca (utente non iscritto) data: 19/05/2013 12:41:22

    ciao Mandoz
    il file che hai allegato non si apre...cioè si apre ma è pieno d geroglifici...
    anche io sono a buon punto mi manca solo il prefestivo...
    allego il mio file "prova se 2"



  • di mandoz (utente non iscritto) data: 19/05/2013 13:21:57

    prova questo



  • di Vecchio Frac data: 19/05/2013 21:16:05

    cit. ".cioè si apre ma è pieno d geroglifici... "
    ---> io apro regolarmente tutti i file postati. A quale file in particolare ti riferisci? Hai installato WinRAR?





  • di Mister_x (utente non iscritto) data: 20/05/2013 00:26:58

    ciao a tutti

    non vorrei entrare nel merito in base ai vostri file esposti per visione al caso, ma ho notato che se io digito in cella B4 entrata alle ore 20.00 e in C4 l'uscita alle ore 4.00 del giorno dopo, nel file Prova cicli mi riporta in C11 un totale do 0 ore, mentre nel file Prova se 2 mi riporta un totale di 12 ore,
    al mio calcolo mentale indistintamente se le ore sono in fascia a,b, o c dovrei avere un valore di 8 ore, mentre nel dettaglio celle C8,C9,C10 nel primo file mi ritrovo 3 zeri, e nel secondo in C8 6 di a, C9 2 di b, C10 4 di c che in questo caso non ci dovrebbero essere.
    Comunque a mio parere, lasciando riserve all'interpretazione dei dati , mancano due fattori principali.
    Le DATE, molto importanti per stabilire se e' un girno feriale, prefestivo,festivo, e di precetto o come il 1 Maggio 2013 festa infrasettimanale ecc. ecc.

    scusate per l'intromissione, ma mi sembrava doveroso dare dei ragguagli al contesto per i calcoli

    ciao da MIster_x





  • di Gianca (utente non iscritto) data: 20/05/2013 02:35:59

    ciao mandoz....
    ho visto il tuo file ma preferisco usare il codice e non le formule...
    per mister invece
    si genera ancora degli errori...diciamo che quello che si avvicina più a
    quel che mi serve è proprio "prova se"
    l'errore viene quando metti si nella cella "B18" che indica alla macro
    appunto il prefestivo...
    come detto prima non riesco a risolvere proprio il prefestivo..
    ma non è tutto...
    esistono oltre ai feriali festivi prefestivi anche i DOPPI FESTIVI!!!
    la macro è concepita in modo da fare un primo ciclo se non si supera la mezzanotte...
    e ripeterlo in caso la mezzanotte venga varcata...
    se siamo in festivo il secondo ciclo viene calcolato come un feriale....
    se siamo in un prefestivo dovrebbe fare viceversa...primo ciclo feriale secondo ciclo festivo.
    però......!!!
    possono capitare anche due festivi consecutivi...
    quindi è da rivedere completamente...
    ma ci siamo..ho quasi fatto...
    naturalmente se avete idee io le vaglio volentieri ma solo in codice...
    grazie a tutti
    notte



  • di Mister_x (utente non iscritto) data: 20/05/2013 22:18:07

    ciao gianca

    visto che ieri ti avevo accennato alcune cose riquardanti le data e le ore, oggi tra uno scroscione di acqua e un raggio di sole ti ho alaborato un file con tutte le problematiche riquardanti questi calcoli
    da come penso non ci dovrebbero essere errori, ma dato che come tu dici, VBA e non formule di excel, se ne trovi qualcuno sarai in grado di modificare il listato

    PS. non me ne voglia, V.F. e gli altri membri del forum, di dare una soluzione completa, ma la cosa mi attirava molto dato che gianca, penso che sia sempre lo stesso, questa richiesta l'aveva incominciata anche su un altro forum da molto tempo, senza pero' venirne a capo fin da ora,
    comunque ti posto il file in versione 2003 ,fai delle prove e dai un parere se e' questo che intendi

    ciao da Mister_x
     
    PS Tutto il VBA lo troverete nel file allegato perche' per capirlo bisogna avere a disposizione l'intero file






  • di Mister_x (utente non iscritto) data: 20/05/2013 23:55:50

    riciao

    mi sono scordato di dirvi che tutti i dati in colonna A,B,C,D vanno inseriti da tastierino numerico per facilitare
    ess. colonna A e C se scriviamo 1/5/13 excel modifica la data 01/05/2013 questo lo sapete, per
    colonna B e D invece ci pensa la sub() a modificare da valuta in orario
    ess. usando il tastierino se scriviamo 8.30 e questo e' un orario, excel al posto del punto mette la virgola quindi e come scrivere un valore 8,30, la sub() lo trasforma in orario quindi 8.30 quindi 8 ore e 30 minuti
    12,0 = 12.00 orario
    22,15 = 22.15 orario

    riciao da Mister_x





  • di Vecchio Frac data: 21/05/2013 09:20:05

    Ciao mister_x,
    cit. "PS. non me ne voglia, V.F. e gli altri membri del forum, di dare una soluzione completa"
    ---> chiamato in causa, devo intervenire ^_^
    Non è mica sbagliato prodigarsi per cercare di dare soluzioni il più complete possibile, anzi: è perfettamente auspicabile. Qui non si tratta di impartire lezioni e tutorial nè di centellinare il proprio sapere per gelosia...
    Dipende peraltro sempre dal contesto e dall'interlocutore.
    Al ragazzino che mi chiede di sviluppargli il compito di scuola, magari tacendo il particolare, riceverà un aiuto più teorico che pratico. Al professionista che si inceppa su formule matriciali incrociate con collegamenti esterni sarà necessario fornire una formula o un codice il più possibile completi, previo tentativo di fargli raggiungere il risultato da solo (qualche volta io ho prodotto codice direttamente, nei casi in cui il tema proposto è particolarmente difficile o complesso anche da spiegare o intrigante perchè inusuale).
    Inoltre questo caso è diverso da quello di poco tempo fa. Non è l'utente che insiste per una soluzione, ma tu che ti dai da fare per completare un ragionamento iniziato.

    Morale: favorisco e caldeggio gli interventi il più possibile precisi e completi. Inoltre io non sono un maestrino che sta qui a bacchettare ogni risposta, è un forum di persone adulte quasi in autogestione che vive e sta i piedi grazie alla fondamentale collaborazione di tutti ^_^

    (mister_x contattami su staff@excelvba.it per favore)






  • di Vecchio Frac data: 21/05/2013 09:22:00

    cit. "usando il tastierino se scriviamo 8.30 e questo e' un orario, excel al posto del punto mette la virgola quindi e come scrivere un valore 8,30, la sub() lo trasforma in orario quindi 8.30 quindi 8 ore e 30 minuti "
    ---> Nel mio foglio di gestione delle presenze ho tagliato questo problema. Inserisco i dati da tastierino immettendo gli orari come numeri a quattro cifre, poi un apposito parser trasforma il numero in un orario corrtto.
    Es. digito "805" e dopo aver premuto Invio diventa "08:05"; digito "1700" che diventa "17:00" ecc.
    Se serve metto la routine a disposizione.





  • di Gianca (utente non iscritto) data: 21/05/2013 09:48:42

    Mister.....
    sei un genio!!!!!
    semplicemente perfetto!!!!

    davvero grazie la tua soluzione è quello che cercavo adatterò il codice alla mia maschera
    gran bel lavoro
    ancora grazie



  • di Gianca (utente non iscritto) data: 21/05/2013 09:59:10

    cit. "Es. digito "805" e dopo aver premuto Invio diventa "08:05"; digito "1700" che diventa "17:00" ecc.
    Se serve metto la routine a disposizione."
    --->certo che serve....manda tranquillo Vecchio Frac la userò volentieri
    e ancora grazie a tuttiiiiiiiiiii



  • di Vecchio Frac data: 21/05/2013 11:38:58

    Ecco qui, codice in un foglio.
    La cosa più interessante è una notazione tipo "15d3" che viene trasformata da Excel in 15000 e "15d-2" che diventa "0,15". L'ho scoperto maneggiando IsNumeric ed è una cosa che odio ^_^
     
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim v As Variant, i As Integer, m As String, r As Long
    'è consentito digitare l'orario di seguito, senza segni di punteggiatura
    '(es. 759 verrà interpretato come 7.59 e così scritto nella cella)
    'il range orario valido e riconosciuto è "7.59" - "23.59"
    
        'se è stata operata una selezione multipla esce dalla sub
        If Target.Cells.Count > 1 Then Exit Sub
        
        'se non è stato digitato un numero esce dalla sub
        'attenzione! sono riconosciuti validi i segni di notazione matematica "e" e "d"
        '"e" sta per esponente e "d" sta per segno decimale
        '1e3 = 1^3 = 1000; 1d2 = 100; 1d-1 = 0,1
        If Not IsNumeric(Target) Then Exit Sub
       
        'se viene digitato un valore inferiore a '700' o superiore a '2359' esce dalla sub
        If Target < 700 Or Target > 2359 Then Exit Sub
       
        'disabilita gli eventi successivi in seguito all'inserimento di valori nelle celle
        Application.EnableEvents = False
        
        'il valore digitato viene formattato come orario hh:mm
        Target = Format(Target, "00:00")
        
        'riabilita l'intercettazione degli eventi
        Application.EnableEvents = True
    End Sub