Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Settimana corta

213 views
Skip to first unread message

Paola

unread,
Sep 9, 2003, 5:07:24 PM9/9/03
to
Riprendo un mio post morto e sepolto qualche settimana fa.

Ci ho lavorato un po' sopra e non ho cavato un ragno dal buco.

Il problema era ed è questo:

Data una data ::) e un numero di giorni mi serve conoscere la data
data+giorni al netto delle domeniche e delle festività rosse.

In attesa che i maghi MVP, rastelli, cinquegrani e Marmiroli (a proposito,
che fine ha fatto ?) costringano Bill a istituire la funzione
giorno.lavorativo.settimana.lunga
ho provato a contare i sabati del periodo DATA+GIORNI e a sottrarli al
totale
DATA+GIORNI-SABATI

Preso da un iniziale imbarazzo per la conquista facilmente raggiunta, mi
sono accorto che, per intervalli di tempo molto lunghi GIORNO.LAVORATIVO
andava inutilmente troppo in là e quindi contavo sabati di troppo che mi
sballavano il conto.

Poi quando ho pensato: "ma se ferragosto viene di sabato lo levo due volte?"
ho buttato tutto al vento e ... eccomi qui.

Qualche idea funzionale ?


Roberto Restelli

unread,
Sep 10, 2003, 4:38:50 AM9/10/03
to
Ciao Paola.

Paola wrote:
> Il problema era ed è questo:
> Data una data ::) e un numero di giorni mi serve conoscere la data
> data+giorni al netto delle domeniche e delle festività rosse.

Direi che per il conteggio con l'esclusione dei sabati e domeniche si può
trovare una soluzione; per l'esclusione delle festività invece la cosa
diventa un po' più complicata perchè non esiste in Excel un calendario con
tali indicazioni (che tra l'altro variano da Nazione a Nazione). La
soluzione in questo caso non è affatto semplice ed immediata.

Se ti accontenti per il momento della risoluzione del primo punto allora
posso pensare a qualche riga di codice per implementare la funzione
GiornoLavorativoSettimanaLunga (o qualsiasi nome tu preferisca). Facci
sapere.

Ciao
Roberto


Barbara

unread,
Sep 10, 2003, 5:30:58 AM9/10/03
to

"Paola" <costa2...@libero.it> ha scritto nel messaggio
news:gir7b.306309$Ny5.9...@twister2.libero.it...

> Riprendo un mio post morto e sepolto qualche settimana fa.
>
> Ci ho lavorato un po' sopra e non ho cavato un ragno dal buco.
>
> Il problema era ed è questo:
>
> Data una data ::) e un numero di giorni mi serve conoscere la data
> data+giorni al netto delle domeniche e delle festività rosse.
>
> In attesa che i maghi MVP, rastelli, cinquegrani e Marmiroli (a proposito,
> che fine ha fatto ?) costringano Bill a istituire la funzione
> giorno.lavorativo.settimana.lunga
> ho provato a contare i sabati del periodo DATA+GIORNI e a sottrarli al
> totale
> DATA+GIORNI-SABATI
>
Lasciando da parte le funzioni matriciali e sfruttando la formula di
fernando di questi giorni, avevo pensato (al momento parliamo solo di
saltare le domeniche):
data iniziale in A1, giorni da aggiungere in A2, dovrebbe essere:
=A1+A2+(INT((A1+A2-1)/7)-INT((A1-2)/7))

però poi mi sono accorta che così potrebbe restituirti una domenica come
risultato... e non è il caso.
Allora l'ho modificata così:
=A1+A2+INT((A1+A2-1)/7)-INT((A1-2)/7)+1*(GIORNO.SETTIMANA(A1+A2+INT((A1+A2-1
)/7)-INT((A1-2)/7))=1)
e sono certa che fernando non ne sarà per niente contento...


Per le festività, mi pare si fosse detto di creare un elenco di tali
festività. Se così fosse queste si possono "aggiungere" (per me
con una matriciale). Però prima, prova la formula sopra per vedere se
funziona.
Ciao
Barbara


Paola

unread,
Sep 10, 2003, 5:43:56 AM9/10/03
to
> Direi che per il conteggio con l'esclusione dei sabati e domeniche si può
> trovare una soluzione; per l'esclusione delle festività invece la cosa
> diventa un po' più complicata perchè non esiste in Excel un calendario con
tali indicazioni (che tra l'altro variano da Nazione a Nazione).


Il problema delle festività in quanto tale mi avete già insegnato a
risolvero qualche centinaio di post fa

Ho creato in una parte del foglio un gruppo di celle che, dato l'anno
anno(adesso()) mi calcola le festività dell'anno in corso e di quello
successivo (perchè se il calcolo lo fai a Natale, devi considerare anche il
capodanno e l'epifania dell'anno dopo). Chiamato Festività detto intervallo:
=GIORNO.LAVORATIVO(A1;A2;Festività)

Ma penso che questo lo sapevate già.


fernando cinquegrani

unread,
Sep 12, 2003, 3:02:59 PM9/12/03
to
| "Paola" <costa2...@libero.it> ha scritto nel messaggio
| news:gir7b.306309$Ny5.9...@twister2.libero.it...
| > Il problema era ed è questo:
| >
| > Data una data ::) e un numero di giorni mi serve conoscere la data
| > data+giorni al netto delle domeniche e delle festività rosse.

"Barbara" <giuliano.anton...@libero.it> ha scritto nel messaggio news:eMKHh53d...@TK2MSFTNGP10.phx.gbl...


| Allora l'ho modificata così:
| =A1+A2+INT((A1+A2-1)/7)-INT((A1-2)/7)+1*(GIORNO.SETTIMANA(A1+A2+INT((A1+A2-1
| )/7)-INT((A1-2)/7))=1)
| e sono certa che fernando non ne sarà per niente contento...

[molto lungo]

provo a fare un riepilogo delle formule per il conteggio dei giorni della settimana
tra due date (mi è stata chiesta sia nel newsgroup sia per mail private).
1. il numero di domeniche a partire dal giorno 1/1/1900 (seriale 1, domenica) al giorno
6/1/1900 (seriale 6, sabato) è 1 (l'1/1/1900, appunto); dal 7/1 al 13/1 è 2; dal
14/1 al 20/1 è 3, e così via per ogni gruppo di 7 giorni;
una funzione che restituisce
1 per valori tra 1 e 6
2 per valori tra 7 e 13
3 per valori tra 14 e 20...
è int((n-1)/7)+1
quindi
=INT((data-1)/7)+1 mi darà il numero di domeniche a partire dall'1/1/1900 (compreso)
2. per contare il numero di lunedì avrò bisogno di una funzione che
restituisce
1 per valori tra 2 e 7
2 per valori tra 8 e 21
3 per valori tra 22 e 27...
come int((n-2)/7)+1
quindi
=INT((data-2)/7)+1 mi darà il numero di lunedì a partire dall'1/1/1900 (compreso)
3. in generale, considerando che 1, 2, 3 corrispondono a domenica, lunedì, martedì, ...
posso dire che
int((n-giornosettimana)/7)+1 mi darà il numero di [giornosettimana] a partire
dall'1/1/1900
in excel =INT((data-[1:7])/7)+1 mi darà il numero di domeniche (1), lunedì (2) a
partire dall'1/1/1900 (compreso).
così in excel, semplificando via via, ottengo:
=INT((DATA.VALORE("28/4/2003")-GIORNO.SETTIMANA(DATA.VALORE("2/1/1900")))/7)+1
=INT((DATA.VALORE("28/4/2003")-DATA.VALORE("2/1/1900"))/7)+1
=INT((DATA.VALORE("28/4/2003")-2)/7)+1
=INT((37739-2)/7)+1
come formule equivalenti
4. il numero di domeniche tra due date (datainizio e datafine) sarà allora pari al
numero di domeniche compreso tra il giorno datafine e l'1/1/1900 compreso, quindi
=INT((datafine-1)/7)+1
meno il numero delle domeniche tra il giorno che precede datainizio e l'1/1/1900
[datainizio viene considerata cioè nell'intervallo], ossia
=INT((datainizio-1-1)/7)+1
ossia la differenza
=INT(datafine-1)/7)+1-(INT((datainizio-1-1)/7)+1).
semplificando e generalizzando:

domeniche =INT((datafine-1)/7)-INT((datainizio-2)/7)
lunedì =INT((datafine-2)/7)-INT((datainizio-3)/7)
martedì =INT((datafine-3)/7)-INT((datainizio-4)/7)
...
sabato =INT((datafine-7)/7)-INT((datainizio-8)/7)

basterà quindi ricordare di associare a datafine
il corrispondente numerico [1:7] del giorno della settimana [domenica:sabato] cercato
5. il numero di giorni tra due date meno un particolare giorno della settimana sarà
quindi
[datafine]-[datainizio-1]-[una delle funzioni prima indicate]
per le domeniche:
=datafine-datainizio+1-INT((datafine-1)/7)+INT((datainizio-2)/7)
in forma più facilmente memorizzabile
=datafine-INT((datafine-1)/7)-(datainizio-INT((datainizio-2)/7))+1
6. quest'ultima formula può essere ulteriormente semplificata in
=INT((6*datafine+giornosettimana-1)/7)-INT((6*datainizio+giornosettimana)/7)+1
quindi

=INT((6*datafine)/7)-INT((6*datainizio+1)/7)+1
fornisce il numero di giorni tra datainizio e datafine escluse le domeniche
=INT((6*datafine+1)/7)-INT((6*datainizio+2)/7)+1
fornisce il numero di giorni tra datainizio e datafine esclusi i lunedì
...

7. è possibile escludere sabati e domeniche con
=INT((6*A2)/7)-INT((6*A1+1)/7)-INT((A2-7)/7)+INT((A1-8)/7)+1
che non ho tempo né voglia di semplificare perchè
equivale a =GIORNI.LAVORATIVI.TOT()
ma che terrò presente se ho una settimana corta senza
domeniche e senza giovedì
=INT((6*A2)/7)-INT((6*A1+1)/7)-INT((A2-5)/7)+INT((A1-6)/7)+1
8. rimane a galla il problema generale posto da paola:
sommando n giorni a una data, che data si ottiene?
la tua soluzione, barbara,
=A1+A2+INT((A1+A2-1)/7)-INT((A1-2)/7)+1*(GIORNO.SETTIMANA(A1+A2+INT((A1+A2-1)/7)-INT((A1-2)/7))=1)
mi sembra funzionare [anche se restituisce,
secondo il mio modo di vedere, un giorno in più: io considero il
giorno stesso come 1, il successivo come 2, ecc.; tu consideri il
giorno stesso come 0, il successivo come 1, ecc.]
è vero però che non mi piace neanche un po' :-)
quella che ti propongo, in base a queste note è un po' troppo
ostica:

=A1+A2+INT((A2-1)/6)-(RESTO(A1-1;7)>0)+(RESTO(A2-1;6)>6+RESTO(A1-1;7))

ma non dispero che tu o qualcun altro o io, se ne avremo
tempo e voglia, possiamo riuscire a semplificarla
9. rimane a galla il problema particolare posto da paola:
con le festività come la mettiamo?
non solo ci sono le festività che coincidono con le domeniche,
ma prolungando l'intervallo possono essere aggiunte:
~ nuove domeniche che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che coincidono con domeniche che non dovranno essere
conteggiate più di una volta nell'intervallo
ma questo amplierebbe ulteriormente l'intervallo:
ma prolungando l'intervallo possono essere aggiunte:
~ nuove domeniche che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che coincidono con domeniche che non dovranno essere
conteggiate più di una volta nell'intervallo
ma questo amplierebbe ulteriormente l'intervallo:
ma prolungando l'intervallo possono essere aggiunte:
~ nuove domeniche che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che coincidono con domeniche che non dovranno essere
conteggiate più di una volta nell'intervallo
ma questo amplierebbe ulteriormente l'intervallo:
ma prolungando l'intervallo possono essere aggiunte:
~ nuove domeniche che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che coincidono con domeniche che non dovranno essere
conteggiate più di una volta nell'intervallo
ma questo amplierebbe ulteriormente l'intervallo:
ma prolungando l'intervallo possono essere aggiunte:
~ nuove domeniche che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che coincidono con domeniche che non dovranno essere
conteggiate più di una volta nell'intervallo
ma questo amplierebbe ulteriormente l'intervallo:
ma prolungando l'intervallo possono essere aggiunte:
~ nuove domeniche che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che non dovranno essere conteggiate nell'intervallo,
~ nuove festività che coincidono con domeniche che non dovranno essere
conteggiate più di una volta nell'intervallo

(fine. ho da lavorare. chiedi la settimana corta, paola :-))

.f

fernando cinquegrani
Microsoft MVP
http://www.prodomosua.it


Barbara

unread,
Sep 13, 2003, 7:10:03 AM9/13/03
to
> 8. rimane a galla il problema generale posto da paola:
> sommando n giorni a una data, che data si ottiene?
> la tua soluzione, barbara,
>
=A1+A2+INT((A1+A2-1)/7)-INT((A1-2)/7)+1*(GIORNO.SETTIMANA(A1+A2+INT((A1+A2-1
)/7)-INT((A1-2)/7))=1)
> mi sembra funzionare [anche se restituisce,
> secondo il mio modo di vedere, un giorno in più: io considero il
> giorno stesso come 1, il successivo come 2, ecc.; tu consideri il
> giorno stesso come 0, il successivo come 1, ecc.]
> è vero però che non mi piace neanche un po' :-)

Non avevo dubbi che non ti piacesse! [non piaceva neanche a me]
Sì, io conto un giorno in più perché secondo me, se vuoi aggiungere "un
giorno lavorativo" a lunedì il risultato deve essere martedì, non lunedì.
[con il tuo sistema, se aggiungi "zero giorni" ti restituisce il giorno
prima della data iniziale, anzi ti torna indietro di un giorno lavorativo.
Es: lun 01/09/2003 ti dà sab 30/08/2003].


> quella che ti propongo, in base a queste note è un po' troppo
> ostica:
>
> =A1+A2+INT((A2-1)/6)-(RESTO(A1-1;7)>0)+(RESTO(A2-1;6)>6+RESTO(A1-1;7))
>
> ma non dispero che tu o qualcun altro o io, se ne avremo
> tempo e voglia, possiamo riuscire a semplificarla

Scusa, ma quand'è che RESTO(x;6) è maggiore di 6?

Comunque adesso la provo.
Ciao
Barbara


Barbara

unread,
Sep 13, 2003, 8:22:54 AM9/13/03
to

"Barbara" <giuliano.anton...@libero.it> ha scritto nel messaggio
news:u#KF7eeeD...@TK2MSFTNGP11.phx.gbl...
Secondo me, quella formula è equivalente a:
=A1+A2+INT((A2-1)/6)-(RESTO(A1-1;7)>0)

perché la seconda parte (almeno con le parentesi così):
+(RESTO(A2-1;6)>6+RESTO(A1-1;7))
restituisce sempre FALSO

Forse tu intendevi:
+(A2>6+RESTO(A1-1;7))

e nella mia versione (cioè contando "un giorno in più" rispetto a te),
dovrebbe essere:
=A1+A2+INT((A2+1)/7)+(RESTO(A1-2;7)>0)+(A2>6+RESTO(A1-1;7))

almeno mi sembra.
Fernando, cosa ne pensi?
Ciao
Barbara

fernando cinquegrani

unread,
Sep 13, 2003, 10:40:50 AM9/13/03
to
"Barbara" <giuliano.anton...@libero.it> ha scritto nel messaggio news:u%23KF7eee...@TK2MSFTNGP11.phx.gbl...

> quella che ti propongo, in base a queste note è un po' troppo
| > ostica:
| >
| > =A1+A2+INT((A2-1)/6)-(RESTO(A1-1;7)>0)+(RESTO(A2-1;6)>6+RESTO(A1-1;7))
| >
| > ma non dispero che tu o qualcun altro o io, se ne avremo
| > tempo e voglia, possiamo riuscire a semplificarla
|
| Scusa, ma quand'è che RESTO(x;6) è maggiore di 6?

oops! un più al posto del meno e qualche parentesi
forse necessaria:

=A1+A2+INT((A2-1)/6)-(RESTO(A1-1;7)>0)+((RESTO(A2-1;6))>(6-RESTO(A1-1;7)))

6-RESTO(A1-1;7), ossia attribuendo 6,5,4,... se il resto è 0,1,2,...
.f
http://www.prodomosua.it


fernando cinquegrani

unread,
Sep 13, 2003, 11:36:49 AM9/13/03
to
"Barbara" <giuliano.anton...@libero.it> ha scritto nel messaggio news:eBbiqHfe...@TK2MSFTNGP11.phx.gbl...

| e nella mia versione (cioè contando "un giorno in più" rispetto a te),
| dovrebbe essere:
| =A1+A2+INT((A2+1)/7)+(RESTO(A1-2;7)>0)+(A2>6+RESTO(A1-1;7))
|
| almeno mi sembra.
| Fernando, cosa ne pensi?

che c'è ancora possibilità di ridurla
[il ragionamento è questo: consideriamo l'intervallo richiesto (A2)
a partire dall'1/1/1900; tale intervallo è pari a
=INT((6*A1)/7) ossia alla contrazione del periodo
tra la data A1, incognita, e l'1/1/1900 al netto delle domeniche.
allora A1 è pari =A2+INT((A2-1)/6)+1
(questo passaggio potrebbe già essere sviluppato meglio);
mi basta ora sommare il risultato ad A1
=A1+A2+INT((A2-1)/6)+1
e testare se togliere o meno la domenica dell'1/1/1900.
questo dannato test nella mia formula prende troppo spazio]
.f
http.//www.prodomosua.it


Barbara

unread,
Sep 15, 2003, 5:14:17 AM9/15/03
to

"fernando cinquegrani" <f.cinq...@prodomosua.it> ha scritto nel
messaggio news:OI1xlzge...@TK2MSFTNGP10.phx.gbl...

> "Barbara" <giuliano.anton...@libero.it> ha scritto nel
messaggio news:eBbiqHfe...@TK2MSFTNGP11.phx.gbl...
> [il ragionamento è questo: consideriamo l'intervallo richiesto (A2)
> a partire dall'1/1/1900; tale intervallo è pari a
> =INT((6*A1)/7) ossia alla contrazione del periodo
> tra la data A1, incognita, e l'1/1/1900 al netto delle domeniche.
> allora A1 è pari =A2+INT((A2-1)/6)+1
> (questo passaggio potrebbe già essere sviluppato meglio);
> mi basta ora sommare il risultato ad A1

tipo: =INT((7*A2+5)/6) ?

> =A1+A2+INT((A2-1)/6)+1
che quindi diventerebbe:
=A1+INT((7*A2+5)/6)

> e testare se togliere o meno la domenica dell'1/1/1900.
> questo dannato test nella mia formula prende troppo spazio]

al momento non ho idee migliori della tua...
Ciao
Barbara
> .f
> http.//www.prodomosua.it
>
>
>
>


fernando cinquegrani

unread,
Sep 15, 2003, 5:32:11 AM9/15/03
to
"Barbara" <giuliano.anton...@libero.it> ha scritto nel messaggio news:OEH2on2...@TK2MSFTNGP11.phx.gbl...

| > =A1+A2+INT((A2-1)/6)+1
| che quindi diventerebbe:
| =A1+INT((7*A2+5)/6)


direi ce n'è abbastanza per un file d'esempio di rio [quesito10].
ci pensi tu o ci pensa enzo?
.f


Barbara

unread,
Sep 15, 2003, 5:54:24 AM9/15/03
to

"fernando cinquegrani" <f.cinq...@prodomosua.it> ha scritto nel
messaggio news:uLQkDx2e...@TK2MSFTNGP11.phx.gbl...

Mi metto d'accordo con enzo. Ma sono sicura che potremo
migliorare/semplificare ancora la soluzione.
Ciao
Barbara


Enzo Samarelli

unread,
Sep 15, 2003, 8:02:38 AM9/15/03
to
Ciao a tutti,

"Barbara" <giuliano.anton...@libero.it> ha scritto nel messaggio

news:ePtOF%232eDH...@TK2MSFTNGP12.phx.gbl...


> "fernando cinquegrani" <f.cinq...@prodomosua.it> ha scritto nel
> messaggio news:uLQkDx2e...@TK2MSFTNGP11.phx.gbl...
> > "Barbara" <giuliano.anton...@libero.it> ha scritto nel
> messaggio news:OEH2on2...@TK2MSFTNGP11.phx.gbl...

> > direi ce n'è abbastanza per un file d'esempio di rio [quesito10].


> > ci pensi tu o ci pensa enzo?

> Mi metto d'accordo con enzo. Ma sono sicura che potremo
> migliorare/semplificare ancora la soluzione.

ho seguito tutto il thread passo, passo..

E' parecchio che tento semplificazioni (carta, penna ed algebra)

Circa datainizio, sono con Fernando, è necessario solo convenire che è il
primo giorno lavorativo.

Barbara ha ragione, teoricamente, ma nel fissare il primo giorno di lavoro
(1° marzo)

non è opportuno complicare la vita per trovare lo zero del calcolo con 28 o
29 feb. o (1° marzo -1).

Alla domanda: "Dalla data di assunzione deve lavorare 150 giorni in
settimana corta" (salvo altre festività, per il momento)

l'utente come opera? datainizio=1°marzo-1 ?

Comunque, basta convenire, credo.

Quando tempo c'è ancora?

Attendo i contatti di Barbara

enzo


Paola

unread,
Sep 17, 2003, 4:57:11 AM9/17/03
to
Grazie per l'interessamento al mio quesito.

Ho notato una cosa che non capisco.

Il mio OE5 con riferimento al "mio" thired mi visualizza 7 post.. I primi 4
(Paola-rastelli -Paola - Barbara) sono diciamo così logici. il successivo si
riferisce alle conversazioni precedenti.

Gli altri 3 (Barbara- Ferdinando - Enzo) cuttano testi non presenti.

Mi sono perso qualcosa o ho qualche problema in OE (o avvengono alle mie ...
spalle mail in pvt?)

Grazie sempre e speriamo che la soluzione sia prossima !!

PS cosè :

Tiziano Marmiroli

unread,
Sep 17, 2003, 5:50:18 PM9/17/03
to
Il Wed, 17 Sep 2003 08:57:11 GMT, Paola ha scritto:

> Ho notato una cosa che non capisco.
>
> Il mio OE5 con riferimento al "mio" thired mi visualizza 7 post..

Allora ne ha persi per strada:

www.google.com/groups?threadm=gir7b.306309%24Ny5.9526190%40twister2.libero.it

--
Tiziano Marmiroli
Microsoft MVP - Office

Paola

unread,
Sep 22, 2003, 1:24:05 PM9/22/03
to
> direi ce n'è abbastanza per un file d'esempio di rio [quesito10].
> ci pensi tu o ci pensa enzo?


Scusate, cosa significa ?


0 new messages