Somma di giorni



  • Somma di giorni
    di Apollo (utente non iscritto) data: 17/01/2011

    Buongiorno ho un problema con un foglio di calcolo, ho una data di partenza per esempio 20 aprile 2011 a questa data devo aggiungere dei giorni per esempio 65, il risultato dovrebbe tenere conto dei soli giorni lavorativi cioè saltare sabato-domenica e festivi.
    grazie anticipatamente
    rino



  • di Mik (utente non iscritto) data: 17/01/2011

    Ciao

    interessante questa cosa...
    dovresti crearti una macro del genere: che cicla iniziando dalla data x e per y giorni e somma se week(dataciclo) è diversa dal sabato e domenica .. per i giorni festivi dovresti anche crearti una lista dei giorni festivi annuali che scarterà dalla somma se dataciclo è compresa in questa lista!

    altro non mi viene in mente adesso!



  • di Isy (utente non iscritto) data: 17/01/2011

    Prova ad inserire formule

    invio allegato



  • Somma di giorni
    di Apollo (utente non iscritto) data: 17/01/2011

    Scusa ma non capisco a cosa serve il file non fa altro che trovare le festività.
    a me serve che data una data p.e. 5/1/2011 devo aggiungere dei giorni diciamo 5 il risultato non deve essere 10/1/2011 ma bensì 13/1/2011 cioè deve saltare il 6 che è l'epifania e l'8 e il 9 che sono sabato e domenica.



  • di Isy (utente non iscritto) data: 17/01/2011

    Intendi procedere con codice vba o con le formule?

    versione excel2003



  • di Ricky53 (utente non iscritto) data: 18/01/2011

    Ciao,
    io leggerei con attenzione quanto scritto da "mik":
    a mio avviso ha centrato il modo di operare, non resta che provare a scrivere del codice.

    sei in grado di inziare e di proseguire?
    con il vba come te la cavi?



  • di Mik (utente non iscritto) data: 18/01/2011

    Allora ragazzi visto che la cosa interessa a tutti, cerchiamo di aiutarci a vicenda! secondo me l'unica strada è il codice vba..

    ho messo giù un po di codice che tiene conto solo del sabato e domenica.
    per togliere i festivi non dovrebbe essere un problema, tranne per pasquetta che purtroppo non si ripete nella stessa data per le diverse annualità...
    siccome vorrei renderlo efficente, valido per qualsiasi anno, chiedo a voi come viene stabilita la cadenza di pasqua nell'annualità?? qualcuno ne conosce i criteri??



  • di Albatros54 (utente non iscritto) data: 18/01/2011

    Semplice funzione che calcola la pasqua.
    ciao
    albatros54
     
    Public Function Pasqua(ByVal Anno As Integer) As Date
    
    'Il metodo è valido per tutti gli anni nel Calendario Gregoriano,
    'ossia dal 1583 in poi
    Dim a%, b%, C%, p%, q%, R%
    a = Anno% Mod 19: b = Anno%  100: C = Anno% Mod 100
    p = (19 * a + b - (b  4) - ((b - ((b + 8)  25) + 1)  3) + 15) Mod 30
    q = (32 + 2 * ((b Mod 4) + (C  4)) - p - (C Mod 4)) Mod 7
    R = (p + q - 7 * ((a + 11 * p + 22 * q)  451) + 114)
    Pasqua = DateSerial(Anno%, R  31, (R Mod 31) + 1)
    
    End Function



  • di Mik (utente non iscritto) data: 18/01/2011

    Albatros

    ecco le due funzioni, una che chiama l'altra

    la funzione principale e calcola_data() e può essere chiamata inserendola come formula in qualsiasi cella di excel, scrivendo così :

    =calcola_data(a1;b1)
    passandoli come paramentri le celle ove sono:
    cella a1 : data iniziale
    cella b2 : giorni da aggiiungere

    ciauu
     
    Public Function Pasqua(Anno As Integer) As Date
    
        Dim A%, B%, C%, P%, Q%, R%
        
        A = Anno% Mod 19: B = Anno%  100: C = Anno% Mod 100
        P = (19 * A + B - (B  4) - ((B - ((B + 8)  25) + 1)  3) + 15) Mod 30
        Q = (32 + 2 * ((B Mod 4) + (C  4)) - P - (C Mod 4)) Mod 7
        R = (P + Q - 7 * ((A + 11 * P + 22 * Q)  451) + 114)
        Pasqua = DateSerial(Anno%, R  32, (R Mod 31) + 1)
        
    End Function
    
    Public Function Calcola_Data(Data As Date, Num_Giorni As Long) As Date
    
        Dim Giorni_Festivi() As Variant, Festivita As Boolean, F As Variant
        
        Giorni_Festivi = Array("1-1", "6-1", "25-04", "1-5", "2-6", "15-8", "1-11", "8-12", "25-12", "26-12")
    
    
        Do While Num_Giorni > 0
            If Weekday(Data, 2) < 6 Then ' weekend
                Festivita = False
    
                ' festività
                For Each F In Giorni_Festivi
                    If Day(F) = Day(Data) And Month(F) = Month(Data) Then
                        Festivita = True
                        Exit For
                    End If
                Next F
    
                ' pasqua e pasquetta
                If Data = Pasqua(Year(Data)) And Data = Pasqua(Year(Data)) + 1 Then Festivita = True
                
                If Not Festivita Then Num_Giorni = Num_Giorni - 1
                
            End If
            Data = Data + 1
        Loop
        Calcola_Data = Data
        
    End Function
    
    



  • di Mik (utente non iscritto) data: 18/01/2011

    Pardon...sostituire questa riga di codice:

    if data = pasqua(year(data)) and data = pasqua(year(data)) + 1 then festivita = true

    con:

    if data = pasqua(year(data)) + 1 then festivita = true

    praticamente pasqua non necessita di essere processata perchè è sempre domenica, mentre pasquetta (pasqua+1) si!


  • Somma di giorni
    di Apollo (utente non iscritto) data: 19/01/2011

    Buonasera scusatemi se mi faccio vivo solo adesso ma mi è stato impossibile prima.
    ringrazio tutti per il vs. interessamento e vedo che avete centrato il mio problema, ho testato la risposta di mik e purtroppo ho visto che non va bene, supponiamo di avere una data 19/01/2011 aggiungiamo 8 giorni la funzione mi ritorna 29/01/2001 mentre invece mi dovrebbe ritornare 31/01/2011.
    grazie.



  • di Locate (utente non iscritto) data: 19/01/2011

    Ciao apollo
    devi apportare una modifica a questo valore data
    if weekday(data, 2) < 6 then
    =0 domenica 6 sabato in
    if weekday(data, 1) < 6 then
    = 1 lunedi 7 domenica

    ciao da locate
    excel 2003



  • di Mik (utente non iscritto) data: 19/01/2011

    Ci avevo già pensato anche se non l'ho ancora postato, volevo vedere se qualcuno si accorgesse di questo piccolo particolare (siamo a scuola)

    allora praticamente il problema si verifica proprio quando l'ultimo giorno da contare cade sul primo festivo..come nel tuo ultimo caso..

    allora guarda ho aperto un nuovo post dove ho perfezionato le tre funzioni base (1° post)...cancella tutto il codice che hai scritto fino ad adesso e copia incolla solo quelle tre funzioni..+ questa che ti passo adesso.

    così la tua specifica funzione risulteà questa e stavolta vai tranquillo che è stata testata

    ciao
     
    Public Function Calcola_Data(ByVal Data As Date, ByVal Num_Giorni As Long) As Date
    
        Do While Num_Giorni > 0
        
            If Not IsWeekEnd(Data) And Not IsFestivo(Data) Then Num_Giorni = Num_Giorni - 1
            
            Data = Data + 1
        
        Loop
        
        Do While IsWeekEnd(Data) Or IsFestivo(Data)
            Data = Data + 1
        Loop
        
        Calcola_Data = Data
        
    End Function
    



  • di Mik (utente non iscritto) data: 19/01/2011

    Alla fine fa la stessa cosa che faceva prima (si legge meglio così) e c'è un'aggiunta che continua a ciclare se l'ultimo giorno cade su un festivo o fine settimana


  • Somma di giorni
    di Apollo (utente non iscritto) data: 19/01/2011

    Grazie funziona alla perfezione.
    rino



  • di Mik (utente non iscritto) data: 19/01/2011

    Prego

    un ringraziamento ad albatros che ha rimediato il calcolo di pasqua

    michele