|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Salve a tutti, ho bisogno di sapere se era possibile avere una formula che mi permettesse di calcolare tra due date i giorni lavorativi che nel mio caso sono 26 mensili.Praticamente mi servono contare i giorni da lunedì a sabato escludendo i giorni festivi. So che è complicato però non so se si crea un calendario e si asssocia una formula penso si possa fare, aiutatemi perchè mi serve per lavoro, grazie.
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve per il conteggio dei giorni che intercorrono tra due date escludendo la sola festività della domenica prova a usare questa furmula: =INT((B1*6)/7)-INT((A1*6+1)/7)+1 supposto che in cella B1 si trovi la data maggiore e in cella A1 la data minore. saluti Andrea
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
si questa va bene però a me interessa una cosa più dettagliata escludendo anche le festività da calendario
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
devi crearti prima un'area che definisce le vacanze. in pratica un elenco in una parte del foglio con tutte le date riferite a feste nazionali. Poi applicare una modifica alla formula. Dopo pranzo ti mando un esempio. saluti Andrea
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Ok aspetto il tuo esempio una cosa mi sono dimenticato a dirti che se il mese è completo la differenza tra le due date deve dare sempre 26, altrimenti si contano i giorni da quando inizia la data a quando finisce es: dal 01/02/2006 al 28/02/2006 mi deve restituire 26; dal 03/02/2006 al 28/02/2006 mi deve restituire 22, grazie
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve con le ultime specifiche il problema è diventato un pochino più complesso. La formula che ti allego, considera quanto segue: viene assegnato il nome "vacanze" ad un range che rappresenta le feste nazionali (io ho considerato come feste: 1/1 - 6/1 - 17/4 - 25/4 -1/5 - 15/8 - 1/11 - 8/12 - 25/12 -26/12) La formula opera così:Se il mese è intero e e non vi sono feste nazionali considera sempre 26 giorni nel caso che vi siano feste nazionali le detrae, Nel caso in cui il mese non è intero, considera gli effettevi giorni escluse le domeniche. NB. La formula è del tipo matriciale quindi da inserire con la combinazioni di tasti CTRL+MAIUSC+INVIO =SE(RESTO(FINE.MESE(B3;0)-FINE.MESE(A3;-1);B3-A3+1)=0;SE(-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)<font color=red>()</font id=red>1))<font color=red>)</font id=red>=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)<font color=red>()</font id=red>1))<font color=red>)</font id=red>B3));-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)<font color=red>()</font id=red>1))<font color=red>)</font id=red>=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)<font color=red>(</font id=red>>1))>B3))+26;26);INT((6*B3)/7)-INT((6*A3+1)/7)+1-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)<font color=red>(</font id=red>>1))>=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)<font color=red>(</font id=red>>1))>B3))) le parentesi in rosso sono da interpretare come simboli di maggiore o minore Saluti Andrea Edited by - a10n11 on 02/28/2006 17:55:58
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Ciao Andrea ho fatto un pò di confusione con il fatto delle festivtà e alla fine ti ho fatto fare lavoro inutile! Ti spiego io devo considerare come mese lavorativo formato da 26 giorni. La prima formula che mi hai dato va bene però si dovrebbe aggiustare quando conteggia febbraio che me ne considera 24 e altri mesi invece che me ne fa 27. Quindi riepilogando ogni mese retribuito è costituito da 26 giorni, quindi un anno sono 312, per questo motivo i giorni in più che ci sono credo in due mesi devono andare a finire a febbraio, credo adesso sia più semplice creare la formula giusta.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve quindi le festività nazionali non devono essere considerate nel conto dei giorni retribuiti?? Cambia un pochino tantissimo!!!! ma siccome mi hai fatto scervellare perchè la formula postata precedentemente era sbagliata, e ci ho lavorato per modificarla, intanto beccati questa poi domani studio la nuova impostazione. formula matriciale: =SE(RESTO(FINE.MESE(B3;0)-FINE.MESE(A3;-1);B3-A3+1)=0;SE(-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)()1)))=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)()1)))B3));-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)()1)))=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)()1)))B3))+(MESE(B3-A3)*26);MESE(B3-A3)*26);SE(MESE(B3-A3)-1()0;(26*(MESE(B3-A3)-1))-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)()1)))=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)(>1))>B3))+(B3-DATA(ANNO(B3);MESE(B3);1))-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)(>1))>=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)(>1))>B3));INT((6*B3)/7)-INT((6*A3+1)/7)+1-SOMMA(1*((vacanze*(1*RESTO(vacanze;7)(>1))>=A3))+SOMMA(1*((vacanze*(1*RESTO(vacanze;7)(>1))>B3)))) saluti Andrea
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Hai ragione che ti ho fatto scervellare e sono mortificato, però credo che sia altrentanto interessante questo tipo di conteggio escludendo le festività, comunque aspetto la nuova formula con le caratteristiche esatte perchè sei bravo con le formule e io ti ammiro. grazie di cuore.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve ora ci dovremmo essere. Il presupposto della formula è questo: ogni mese completo da considerare 26 giorni, per frazione di mese i giorni effettivi esclusa la domenica. es. dal 01/01/06 al 05/03/06 il totale dovrà essere 56 (26+26+4 in quanto il 5 è domenica) Ecco la formula rivista e corretta non più matriciale. =SE(RESTO(FINE.MESE(B3;0)-FINE.MESE(A3;-1);B3-A3+1)=0;MESE(B3-A3)*26;SE(MESE(B3-A3)-1<font color=red>()</font id=red>0;(26*(MESE(B3-A3)-1))+INT((6*B3)/7)-INT((6*DATA(ANNO(B3);MESE(B3);1)+1)/7)+1;INT((6*B3)/7)-INT((6*DATA(ANNO(B3);MESE(B3);1)+1)/7)+1)) provala e speriamo che stavolta abbiamo fatto centro. Ps. nessun problema per il disguido, prima o poi l'altra formula verrà utile. saluti Andrea Edited by - a10n11 on 03/01/2006 09:59:07
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Andrea sei un Grande la Formula è perfetta bravissimo! Poi mi insegni il trucco... Se ho bisogno per altre cose come di consueto ti ricontatto, Ciao.
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Andrea mi devi risolvere un'altra condizione siccome io per fare un relativo calcolo con due diverse retribuzioni ho bisogno di separare i giorni fino al 30/04. Quindi se la data di inizio e la data di fine è tra il 01/01 e il 30/04 c'è una retribuzione dal 01/05 un'altra. Poi un'altra cosa mi serve conteggiare i giorni dell'anno solare da calendario ho fatto la differenza tra le due date e per esempio dal 01/01/ al 31/01 mi da 30 al posto di 31. Grazie ancora.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve la formula sotto costruita a solo titolo di esempio , verifica se il range tra la data iniziale e la data finale è compreso tra 1/1 e 30/4. Per il range fino al 30/4 la formula moltiplica i giorni intercorsi per un valore ipotetico di 200 mentre per i giorni eccedenti la data del 30/4 moltiplica i giorni per un valore ipotetico di 120 Esempio: dato il range 01/01/06 - 31/07/06 dal 01/01 al 30/04 gg.120*200 dal 01/05 al 31/07 gg. 92*120 =SE(MESE(B2)(=4;(B2-A2+1)*200;SE(E(MESE(B2))4;MESE(A2)<5);(DATA(ANNO(B2);4;30)-A2+1)*200;"")+(B2-DATA(ANNO(B2);4;30))*120) Per quanto riguarda invece la differenza tra le date, l'argomento era stato già affrontato. dal 01/01/06 (in A1) al 31/01/06 (in B1) se scrivi =b1-A1 , restituisce 30 perchè esclude il giorno di partenza se invece scrivi =b1-A1+1 include il giorno di partenza. saluti Andrea
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Siamo daccordo su tutto però la formula si deve riferire alla prima cioè come base i giorni della settimana esclusa la domenica e se il mese è intero 26; a me interessa semplicemente distinguere in due celle differenti quanti giorni retribuiti ci sono al 30/04 e quanti dal 01/05;grazie.
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Ciao Andrea, sai ho notato che nella formula che credevo fosse esatta c'è un difetto, se io cambio la data iniziale i giorni non variano mentre se cambio la data finale si.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
In effetti hai ragione la formula è corretta solo se la data iniziale è l'1/1 . Ho cambiato strada usando una macro che mi è più familiare. Questa che ti passo vale solo per rilevare l'intervallo entro aprile domani se ho tempo la completo anche per il resto. ( La macro legge i valori di data iniziale in A3 e finale in B3) Sub entro_Aprile() x = 26 dtin = Range("a3").Value dfin = Range("b3").Value dtlimit = #4/30/2006# udmin = DateSerial(Year(dtin), Month(dtin) + 1, 0) udmfin = DateSerial(Year(dfin), Month(dfin) + 1, 0) prmin = DateSerial(Year(dtin), Month(dtin), 1) prmfin = DateSerial(Year(dfin), Month(dfin), 1) mlimit = Month(dtlimit) mesin = Month(dtin) mesfin = Month(dfin) If mesfin <= 4 Then If dtin = prmin And dfin = udmfin Then ttot = x End If If dtin = prmin Then For n = 1 To mesfin - 1 ttot = ttot + x Next Else gecc1 = Int((udmin * 6) / 7) - Int((dtin * 6 + 1) / 7) + 1 z = mesfin - mesin - 1 gecc2 = z * 26 End If If dfin = udmfin Then tttot = ttot + 26 Else gecc = Int((dfin * 6) / 7) - Int((prmfin * 6 + 1) / 7) + 1 End If Else If dtin = prmin Then For n = 1 To mlimit ttot = ttot + x Next Else gecc1 = Int((udmin * 6) / 7) - Int((dtin * 6 + 1) / 7) + 1 z = mlimit - mesin gecc2 = z * 26 End If End If ggtot = ttot + gecc1 + gecc + gecc2 Range("e25") = ggtot End Sub provala e guarda se funziona a me pare che dia il risultato corretto. saluti Andrea
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Ciao Andrea, grazie per avermi rispotsto ne ho veramente bisogno di questa formula, però purtoppo la macro non va perchè se tu provi a fare per esempio dal 23/01/2006 al 30/04/2006 da come risultato 60 al posto di 85 e poi addirittura dal 23/01/2006 al 31/01/2006 da -18! Un'altra cosa ma la macro funziona solo per il 2006? Grazie per la tua pazienza e la tua bontà.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve Ho riprovato la macro con le date che non ti funzionavano. Ho trovato la svista che si trova in questa riga: tttot = ttot + 26 se noti bene c'è una "t" di troppo modifica in ttot= ttot+26 e funzionerà. La macro per come l'ho scritta punta al 2006 ma si fa presto a renderla utilizzabile per qualsiasi anno. saluti Andrea
|
|
Rank: Member
Iscritto dal : 10/18/2003 Posts: 14
|
Ciao Andrea, ho trovato un altro errore purtoppo! se fai dal 01/04/2006 al 30/04/2006 per esempio da 130 giorni cosa impossibile. P.S. Ho apportato la correzione. Grazie.
|
|
Guest |