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

Numero giorni lavorativi da elenco date

7 views
Skip to first unread message

cucchiaino

unread,
Nov 14, 2006, 12:23:29 PM11/14/06
to
Ciao a tutti.

Stasera sono venuto a casa con un nuovo problemino che ho pensato di
risolvere insieme a voi.

In colonna A, previa intestazione, ho una serie di date
che "purtroppo" contengono anche l'orario; non è cioè
un numero intero.
Una data può quindi ripetersi più di una volta ma distinguersi
con i suoi "simili" per la parte oraria.

Questo elenco non raggiunge mai le 1000 righe e l'ordinamento
crescente non è assicurato.

Quesito:
serve in una cella il conteggio dei giorni di calendario, cioè
conteggiare univocamente tutte le date diverse fra loro,
indipendentemente dall'orario che contengono, escludendo
eventuali inserimenti di sabati e di domeniche.

Forse si era già capito ma vorrebbero che il conteggio sia il risultato
di una formula, senza celle d'appoggio e (ahi ahi) senza vba.

Ce la possiamo fare?
Io ci sto già provando, ma ho qualche difficoltà per "colpa" della
parte oraria contenuta nelle date.


()---cucchiaino


Franz Verga

unread,
Nov 14, 2006, 12:35:59 PM11/14/06
to


Ciao Cucchiaino.

A me questa funziona:

=GIORNI.LAVORATIVI.TOT(MIN($A$2:$A$60);MAX($A$2:$A$60))

con l'elenco date in $A$2:$A$60


--
Spero d'esserti stato d'aiuto.

Ti ringrazio anticipatamente per il riscontro.

Ciao

Franz Verga


giovanna

unread,
Nov 14, 2006, 1:36:33 PM11/14/06
to
Scriveva cucchiaino nel <mn.744f7d6b5...@excel.it>, del
14/11/2006:

> senza celle d'appoggio
>

> ma ho qualche difficoltà per "colpa" della
> parte oraria contenuta nelle date.

io ho difficoltà perché NON vuoi colonne d'appoggio! :-)

--
ciao
giovanna
..........................................
http://www.riolab.org
..........................................


ivano

unread,
Nov 14, 2006, 2:07:43 PM11/14/06
to

"cucchiaino" <so...@excel.it> ha scritto nel messaggio
news:mn.744f7d6b5...@excel.it...


Ciao,
anch'io ho dei problemi dopo:
=CONFRONTA(INT(A1:A17);INT(A1:A17);0)=RIF.RIGA(A1:A17)
matriciale
che funziona nella barra formula, ma che non ne riesco a fare la somma,
anche dopo conversione in valore numerico.

ivano


giovanna

unread,
Nov 14, 2006, 5:29:52 PM11/14/06
to
Scriveva giovanna nel <mn.74987d6b0...@asiatiscali.it>, del
14/11/2006:

> Scriveva cucchiaino nel <mn.744f7d6b5...@excel.it>, del 14/11/2006:
>
>> senza celle d'appoggio
>>
>
>> ma ho qualche difficoltà per "colpa" della
>> parte oraria contenuta nelle date.
>
> io ho difficoltà perché NON vuoi colonne d'appoggio! :-)

ciao cucch,
mi pare vada questa, senza colonna appoggio:
=SOMMA(1*(RESTO(SE(VAL.ERRORE(PICCOLO(SE(FREQUENZA(INT(A1:A20);INT(A1:A20))>0;INT(A1:A20);"");RIF.RIGA(A1:A20)))=FALSO;PICCOLO(SE(FREQUENZA(INT(A1:A20);INT(A1:A20))>0;INT(A1:A20);"");RIF.RIGA(A1:A20)));7)>1))
matriciale.
Toglie i sabato e domenica.
vedi se....

barbara

unread,
Nov 14, 2006, 6:36:00 PM11/14/06
to

"cucchiaino" <so...@excel.it> ha scritto nel messaggio
news:mn.744f7d6b5...@excel.it...
> Ciao a tutti.
>
> Stasera sono venuto a casa con un nuovo problemino che ho pensato di
> risolvere insieme a voi.
>
> In colonna A, previa intestazione, ho una serie di date
> che "purtroppo" contengono anche l'orario; non è cioè
> un numero intero.
> Una data può quindi ripetersi più di una volta ma distinguersi
> con i suoi "simili" per la parte oraria.
>
> Questo elenco non raggiunge mai le 1000 righe e l'ordinamento
> crescente non è assicurato.
>
> Quesito:
> serve in una cella il conteggio dei giorni di calendario, cioè
> conteggiare univocamente tutte le date diverse fra loro, indipendentemente
> dall'orario che contengono, escludendo
> eventuali inserimenti di sabati e di domeniche.
>
Ciao cucchiaino,
l'ora non è la più adatta per non fare errori... comunque provo.
Dati in A2:A20
=SOMMA(1*(SE(RESTO(INT(A2:A20);7)>1;CONFRONTA(INT(A2:A20);INT(A2:A20);))=RIF.RIGA(A1:A19)))
matriciale

Ciao
Barbara


Franz Verga

unread,
Nov 14, 2006, 9:14:06 PM11/14/06
to

Rileggendo bene il quesito mi sa che ho interpretato male la domanda... :-(


--
Ciao

Franz Verga


giovanna

unread,
Nov 15, 2006, 3:25:47 AM11/15/06
to
Scriveva barbara nel <Orr9kWEC...@TK2MSFTNGP02.phx.gbl>, del
15/11/2006:


> Ciao cucchiaino,
> l'ora non è la più adatta per non fare errori... comunque provo.
> Dati in A2:A20
> =SOMMA(1*(SE(RESTO(INT(A2:A20);7)>1;CONFRONTA(INT(A2:A20);INT(A2:A20);))=RIF.RIGA(A1:A19)))
> matriciale
>

Ciao B.
bella! Decisamente più lineare della mia.
bacioni!

eliano

unread,
Nov 15, 2006, 3:53:01 AM11/15/06
to

"barbara" ha scritto:

Ciao Lady B.
Mi associo a Giovanna (ciao) con i bacioni indirizzati al bimbo,
naturalmente.:-))
Eliano

Barbara

unread,
Nov 15, 2006, 7:05:04 AM11/15/06
to

"ivano" <chiappaiv...@hotmail.com> ha scritto nel messaggio
news:%23B9xzAC...@TK2MSFTNGP02.phx.gbl...

>
> Ciao,
> anch'io ho dei problemi dopo:
> =CONFRONTA(INT(A1:A17);INT(A1:A17);0)=RIF.RIGA(A1:A17)
> matriciale
> che funziona nella barra formula, ma che non ne riesco a fare la somma,
> anche dopo conversione in valore numerico.
>
> ivano
>
In effetti, se in A1:A17 non ci sono dei semplici valori, ma formule (anche
riferimenti a celle che ne contengono), si presenta questa anomalia.
Non ho ancora capito né perché, né esattamente in che casi questo si
verifica.
Ci sto pensando, ma non ho avuto nessuna ispirazione!

Ciao
Barbara

cucchiaino

unread,
Nov 15, 2006, 7:14:09 AM11/15/06
to
barbara scriveva il 15/11/2006 :

> Ciao cucchiaino,

ciao barbara, ciao ivano, ciao giovanna, ciao franz

> l'ora non è la più adatta per non fare errori... comunque provo.
> Dati in A2:A20
> =SOMMA(1*(SE(RESTO(INT(A2:A20);7)>1;CONFRONTA(INT(A2:A20);INT(A2:A20);))=RIF.RIGA(A1:A19)))
> matriciale

grazie barbara, funziona

partendo anch'io dalla geniale formula di base di Ivano
ero arrivato a questa:

=SOMMA((CONFRONTA(INT(COLDATE);INT(COLDATE);0)=RIF.RIGA(COLDATE))*(GIORNO.SETTIMANA(COLDATE;2)<6))

sempre matriciale

la zona COLDATE è definita nei nomi di zona con:
=SCARTO(Foglio1!$A$1;0;0;CONTA.VALORI(Foglio1!$A:$A))

L'idea di Ivano di verificare la coincidenza del risultato del
confronta con quello di rif.riga, visto che avviene una volta sola per
ogni data, è davvero formidabile


()---cucchiaino


cucchiaino

unread,
Nov 15, 2006, 7:17:22 AM11/15/06
to
Nel suo scritto precedente, Barbara ha sostenuto :

> "ivano" <chiappaiv...@hotmail.com> ha scritto nel messaggio
> news:%23B9xzAC...@TK2MSFTNGP02.phx.gbl...
>>
>> Ciao,
>> anch'io ho dei problemi dopo:
>> =CONFRONTA(INT(A1:A17);INT(A1:A17);0)=RIF.RIGA(A1:A17)
>> matriciale
>> che funziona nella barra formula, ma che non ne riesco a fare la somma,
>> anche dopo conversione in valore numerico.
>>
>> ivano
>>
> In effetti, se in A1:A17 non ci sono dei semplici valori, ma formule (anche
> riferimenti a celle che ne contengono), si presenta questa anomalia.
> Non ho ancora capito né perché, né esattamente in che casi questo si
> verifica.

Ho riscontrato quanto detto da Ivano anche sulle celle senza formule.
E' davvero strano che l'interrogazione con F9 sulla barra ti dia la
matrice dei VERO FALSO, ma ciò non avviene a formula confermata. ??


()---cucchiaino


cucchiaino

unread,
Nov 15, 2006, 7:21:50 AM11/15/06
to
Scriveva giovanna martedì, 14/11/2006:

>> io ho difficoltà perché NON vuoi colonne d'appoggio! :-)
>
> ciao cucch,
> mi pare vada questa, senza colonna appoggio:
> =SOMMA(1*(RESTO(SE(VAL.ERRORE(PICCOLO(SE(FREQUENZA(INT(A1:A20);INT(A1:A20))>0;INT(A1:A20);"");RIF.RIGA(A1:A20)))=FALSO;PICCOLO(SE(FREQUENZA(INT(A1:A20);INT(A1:A20))>0;INT(A1:A20);"");RIF.RIGA(A1:A20)));7)>1))
> matriciale.
> Toglie i sabato e domenica.
> vedi se....

Grazie Giovanna.
Naturalmente funziona anche la tua e ci sei arrivata senza l'aiuto di
Ivano.

Quella che ho messo assieme io è arrivata solo dopo che Ivano ha
inviato la sua, ottima base di partenza, come dicevo a Barbara.


()---cucchiaino


cucchiaino

unread,
Nov 15, 2006, 7:28:25 AM11/15/06
to
Dopo dura riflessione, Franz Verga ha scritto :

>> Ciao Cucchiaino.
>> A me questa funziona:
>> =GIORNI.LAVORATIVI.TOT(MIN($A$2:$A$60);MAX($A$2:$A$60))
>>
>> con l'elenco date in $A$2:$A$60
>
> Rileggendo bene il quesito mi sa che ho interpretato male la domanda... :-(

In effetti temevo che qualcuno potesse interpretare il termine
"calendario" come hai fatto tu.

Ciò non toglie niente alla tua bella intuizione, molto utile se
si dovesse conteggiare i giorni "teorici" lavorativi fra una data
e un'altra. Capita in realtà che un'azienda può effettuare dei ponti,
che la festa patronale cada su un feriale, ecc...

Ti ringrazio per questo.


()---cucchiaino


cucchiaino

unread,
Nov 15, 2006, 7:38:17 AM11/15/06
to
cucchiaino ha pensato forte :

> di una formula, senza celle d'appoggio e (ahi ahi) senza vba.

comunque, giusto per non perdere il vizio, avrei potuto utilizzare
la seguente funzione:
--------------------------------------
Function glav(zona As Range) As Long
Dim cella As Range
Dim d() As String
Dim i As Long
Dim bu As Long
Dim v As Date
Dim xd As String
Dim r As Long

ReDim d(0)
For Each cella In zona
v = cella.Value
If Weekday(v, vbMonday) < 6 Then
xd = Format(v, "yyyy/mm/dd")
If IsError(Application.Match(xd, d, 0)) Then
i = i + 1
ReDim Preserve d(i)
d(i) = xd
End If
End If
Next

glav = i

End Function
-------------------------------------------------

Da richiamare da Excel oppure da una sub, tipo:
----------------------------------------------------
Sub contagiorni()
Dim zona As Range
Dim ng As Long
Set zona = Range("A2", Cells(Cells.Rows.Count, "A").End(xlUp))
ng = glav(zona)
End Sub
--------------------------------------------------------------

()---cucchiaino


Norman Jones

unread,
Nov 15, 2006, 7:57:25 AM11/15/06
to
Ciao Cucchiaino,

Ho seguito la discussione con molto interesse ma non ho suggerito
un codice precisamente perché hai incluso esplicitamente la restrizione:

>> una formula, senza celle d'appoggio e (ahi ahi) senza vba.


---
Regards,
Norman


giovanna

unread,
Nov 15, 2006, 8:16:48 AM11/15/06
to
Scriveva cucchiaino nel <mn.7b1d7d6b2...@excel.it>, del
15/11/2006:

ciao cucch e Barbara, e Ivano!
sono io che non ho capito il problema di Ivano?
Non ho testato il caso di presenza di formule in A1:A17, ma in presenza
di date nel formato indicato da Cucch, a me funziona:
=SOMMA(1*(CONFRONTA(INT(A1:A20);INT(A1:A20);0)=RIF.RIGA(A1:A20)))
matriciale.
... era questo o davvero non ho capito?

eliano

unread,
Nov 15, 2006, 9:33:02 AM11/15/06
to

"cucchiaino" ha scritto:

Ciao cucchiaino vizioso.:-))

Solo per curiosità.
Tu mi insegni che in excel esistono le funzioni di excel, le macro, le UDF,
più tante altre cose che magari io non conosco.:-))

La richiesta era:


> > di una formula, senza celle d'appoggio e (ahi ahi) senza vba.

Dal punto di vista del richiedente, che differenza avrebbe fatto usare una
funzione di excel o una UDF come la tua ?

Grazie e saluti.
Eliano

cucchiaino

unread,
Nov 15, 2006, 12:45:16 PM11/15/06
to
Norman Jones ha pensato forte :
> Ciao Cucchiaino,

ciao Norman

> Ho seguito la discussione con molto interesse ma non ho suggerito
> un codice precisamente perché hai incluso esplicitamente la restrizione:
>
>>> una formula, senza celle d'appoggio e (ahi ahi) senza vba.

si, infatti avevo premesso "per non perdere il vizio" ... :-)

La verità è che l'avevo preparata alla prima richiesta (poi hanno
preferito una formula !?) e allora ho pensato di accodarla al thread,
a disposizione del ng.

ciao

()---cucchiaino


cucchiaino

unread,
Nov 15, 2006, 1:02:33 PM11/15/06
to
eliano ha detto questo mercoledì :

> Ciao cucchiaino vizioso.:-))
>
> Solo per curiosità.

ciao eliano curioso. :-))

> Tu mi insegni che in excel esistono le funzioni di excel, le macro, le UDF,
> più tante altre cose che magari io non conosco.:-))
>
> La richiesta era:
>>> di una formula, senza celle d'appoggio e (ahi ahi) senza vba.
>
> Dal punto di vista del richiedente, che differenza avrebbe fatto usare una
> funzione di excel o una UDF come la tua ?

C'è un unico solo motivo che sono riuscito (con un po di sforzo) a
riconoscere al richiedente:

la formula è più comprensibile e più facilmente modificabile da chi
non conosce il vb (ma lo sfiderò a modificarla, se ci riesce!)

forse ce n'è un altro non confessato che è quello del
fascino delle matriciali ;-)

()---cucchiaino


fernando cinquegrani

unread,
Nov 16, 2006, 1:14:54 AM11/16/06
to
[cucchiaino] scrive in
http://www.google.it/groups?threadm=mn.744f7d6b5...@excel.it

> Quesito:
> serve in una cella il conteggio dei giorni di calendario, cioè
> conteggiare univocamente tutte le date diverse fra loro,
> indipendentemente dall'orario che contengono, escludendo
> eventuali inserimenti di sabati e di domeniche.

questa dovrebbe accettare anche le formule
in A2:A20 =OGGI()+CASUALE()*20
in una cella qualsiasi:
=SOMMA(1*(FREQUENZA(SE(RESTO(INT(A2:A20);7)>1;INT(A2:A20);"");RIF.RIGA(INDIRETTO(INT(MIN(A2:A20))&":"&INT(MAX(A2:A20)))))>0))
[provare, io non l'ho fatto a sufficienza]
.f


fernando cinquegrani

unread,
Nov 16, 2006, 7:29:51 PM11/16/06
to
[eliano] scrive in
http://www.google.it/groups?threadm=3C62FB32-AB28-402F...@microsoft.com

> Dal punto di vista del richiedente, che differenza avrebbe fatto
> usare una funzione di excel o una UDF come la tua ?

io preferisco in generale le formule per due motivi:
1. il foglio è immediatamente utilizzabile anche da chi
non conosce o conosce poco excel.
L'impostazione di default della protezione macro è impostata
su 'elevata'. L'operazione Strumenti :: Macro :: Protezione ::
Livello di protezione [x] medio è spesso tutt'altro che banale:
gli utilizzatori quasi mai leggono le note d'installazione o le note
introduttive. inoltre il codice sarà sempre più difficile da far
circolare: provato con excel2007?
2. il foglio elettronico è un rapporto tecnico, la successione e
la documentazione del calcolo è parte integrante del rapporto
stesso.
inoltre vi è una maggiore (ma non assoluta) compatibilità tra
versioni diverse di excel, una maggiore (ma assolutamente non
assoluta) compatibilità con altri fogli elettronici.
non tutto però si può risolvere con formule.
per il secondo motivo sono anche più favorevole alle
funzioni utente rispetto alle macro. devo dar atto a quanti
solitamente rispondono su questo newsgroup alle domande
che richiedono del codice di aver sempre privilegiato le funzioni
utente rispetto alle macro.
.f
fernando cinquegrani
Microsoft MVP
http://www.prodomosua.eu

0 new messages