Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

formula Excel con le date Opzioni
delvallo
Inviato: Tuesday, February 28, 2006 8:14:26 AM
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.
Sponsor
Inviato: Tuesday, February 28, 2006 8:14:26 AM

 
a10n11
Inviato: Tuesday, February 28, 2006 11:13:46 AM

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

delvallo
Inviato: Tuesday, February 28, 2006 11:23:37 AM
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
a10n11
Inviato: Tuesday, February 28, 2006 12:43:03 PM

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

delvallo
Inviato: Tuesday, February 28, 2006 1:19:06 PM
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
a10n11
Inviato: Tuesday, February 28, 2006 5:40:27 PM

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

delvallo
Inviato: Tuesday, February 28, 2006 8:59:27 PM
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.
a10n11
Inviato: Tuesday, February 28, 2006 10:44:05 PM

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


delvallo
Inviato: Wednesday, March 01, 2006 7:57:28 AM
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.
a10n11
Inviato: Wednesday, March 01, 2006 9:57:33 AM

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

delvallo
Inviato: Wednesday, March 01, 2006 10:09:25 AM
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.
delvallo
Inviato: Wednesday, March 01, 2006 10:42:40 AM
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.
a10n11
Inviato: Wednesday, March 01, 2006 6:23:38 PM

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

delvallo
Inviato: Wednesday, March 01, 2006 7:02:24 PM
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.
delvallo
Inviato: Thursday, March 02, 2006 4:33:22 PM
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.
a10n11
Inviato: Thursday, March 02, 2006 11:10:32 PM

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

delvallo
Inviato: Friday, March 03, 2006 7:38:04 AM
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à.
a10n11
Inviato: Friday, March 03, 2006 11:42:17 AM

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


delvallo
Inviato: Friday, March 03, 2006 12:00:42 PM
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.
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.