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

Quiz 45

17 views
Skip to first unread message

Scossa

unread,
Feb 11, 2012, 10:02:19 AM2/11/12
to
Allora, visto che la soluzione di Barbara per trovare anni mesi e
giorni trascorsi tra due date:
=ANNO(B2)-ANNO(A2)-(MESE(B2)<MESE(A2))&" anni ;
"&12*(MESE(B2)<MESE(A2))+MESE(B2)-MESE(A2)-(GIORNO(B2)<GIORNO(A2))&"
mesi; "&DATA(ANNO(B2);MESE(B2);GIORNO(B2))-DATA(ANNO(B2);MESE(B2)-
(GIORNO(B2)<GIORNO(A2));GIORNO(A2))&" giorni "

in alcuni casi fallisce:

data in. data fine tempo
01/01/2011 01/01/2012 1 anni; 0 mesi; 0 giorni OK
01/01/2011 01/01/2012 1 anni; 1 mesi; 11 giorni OK
19/01/1979 04/01/2012 33 anni ; -1 mesi; 16 giorni FAULT!

Trovare una formula alternativa che sia corretta e restituisca la
stringa:
n anni; n mesi; n giorni
rappresentante la differenza tra data fine e data in.

Non sono ammesse colonne/celle di appoggio, ne' l'uso di nomi.

Questa volta:
3 punti alla prima soluzione valida
5 punti alla soluzione più breve

Bye!
scossa

plinius

unread,
Feb 11, 2012, 11:48:38 AM2/11/12
to

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:92d2efff-6ab2-452b...@j14g2000vba.googlegroups.com...
***************************

Non brilla per concisione, ma mi pare funzioni:

=ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
"&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&"
mesi -
"&SE(B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&"
giorni"

Ciao,
E.


Scossa

unread,
Feb 11, 2012, 2:15:44 PM2/11/12
to
On 11 Feb, 17:48, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> Non brilla per concisione, ma mi pare funzioni:
>
> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
> "&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&"
> mesi -
> "&SE(B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&"
> giorni"

Ripeto la risposta sperando che almeno questa "arrivi" (la precedente
è di oltre un'ora e ancora non si vede).

Ok, sembra buona, l'ho aggiustata per mettere i ";" nell'output come
richiesto:
=ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
"&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-
MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&" mesi; "&SE(B1-
DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-
DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-
DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&" giorni"

verifico alcune date ma direi che i 3 punti (e l'onere del prossimo
quiz) sono tuoi.

E adesso vediamo di accorcirla! sono 333 caratteri, direi che si può
scendere.

Bye!
scossa

Scossa

unread,
Feb 11, 2012, 1:16:45 PM2/11/12
to
On 11 Feb, 17:48, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "Scossa" <scossa...@gmail.com> ha scritto nel messaggionews:92d2efff-6ab2-452b...@j14g2000vba.googlegroups.com...
Ok, l'ho corretta mettendo i ";" come richiesto:

=ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
"&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-
MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&" mesi; "&SE(B1-
DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-
DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-
DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&" giorni"

Verifico un po' di date e, salvo sorprese, i 3 punti sono tuoi.

Sono 333 caratteri: vediamo di accorciarla!!

Bye!
scossa

plinius

unread,
Feb 11, 2012, 4:47:19 PM2/11/12
to

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:cbac8ed2-f4a5-4c51...@e27g2000vbu.googlegroups.com...
**************************************

In attesa dei tagliatori di teste, cominciamo a scendere qualcosa (241):

=ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
"&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
mesi - "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
giorni"

Ciao,
E.


plinius

unread,
Feb 11, 2012, 4:53:31 PM2/11/12
to

"plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
news:jh6nln$d7s$1...@dont-email.me...
Con il ";" invece del trattino (239):

=ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
"&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
mesi; "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
giorni"


plinius

unread,
Feb 11, 2012, 5:19:02 PM2/11/12
to

"plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
news:jh6o1b$f9u$1...@dont-email.me...
Questa è da 206, ma bisogna verificare che funzioni sempre bene... :-)

=RESTO(ANNO(B1-A1+2);100)&" anni;

plinius

unread,
Feb 12, 2012, 9:06:51 AM2/12/12
to

"plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
news:jh6ph6$nl9$1...@dont-email.me...
>
> "plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
> news:jh6o1b$f9u$1...@dont-email.me...
>>
>> "plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
>> news:jh6nln$d7s$1...@dont-email.me...
>>>
>>> "Scossa" <scos...@gmail.com> ha scritto nel messaggio
>>> news:cbac8ed2-f4a5-4c51...@e27g2000vbu.googlegroups.com...
>>> On 11 Feb, 17:48, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>>>>
>>>> Non brilla per concisione, ma mi pare funzioni:
>>>>
>>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
>>>> "&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&"
>>>> mesi -
>>>> "&SE(B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&"
>>>> giorni"
>>>
>>> Ripeto la risposta sperando che almeno questa "arrivi" (la precedente
>>> č di oltre un'ora e ancora non si vede).
>>>
>>> Ok, sembra buona, l'ho aggiustata per mettere i ";" nell'output come
>>> richiesto:
>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
>>> "&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-
>>> MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&" mesi; "&SE(B1-
>>> DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-
>>> DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-
>>> DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&" giorni"
>>>
>>> verifico alcune date ma direi che i 3 punti (e l'onere del prossimo
>>> quiz) sono tuoi.
>>>
>>> E adesso vediamo di accorcirla! sono 333 caratteri, direi che si puň
>>> scendere.
>>>
>>> Bye!
>>> scossa
>>>
>>> **************************************
>>>
>>> In attesa dei tagliatori di teste, cominciamo a scendere qualcosa (241):
>>>
>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
>>> "&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
>>> mesi - "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
>>> giorni"
>>>
>>> Ciao,
>>> E.
>>>
>>
>> Con il ";" invece del trattino (239):
>>
>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
>> "&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
>> mesi; "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
>> giorni"
>>
>
> Questa č da 206, ma bisogna verificare che funzioni sempre bene... :-)
>
> =RESTO(ANNO(B1-A1+2);100)&" anni;
> "&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
> mesi; "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
> giorni"
>

Sě, il metodo funziona.
Questa accorcia ancora qualcosa (172)

=RESTO(ANNO(B1-A1+2);100)&" anni;
"&RESTO(MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+12;12)&" mesi;
"&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&" giorni"

Ciao,
E.


Bruno Campanini

unread,
Feb 12, 2012, 10:23:34 AM2/12/12
to
plinius was thinking very hard :
> "plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
> news:jh6ph6$nl9$1...@dont-email.me...
>>
>> "plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
>> news:jh6o1b$f9u$1...@dont-email.me...
>>>
>>> "plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
>>> news:jh6nln$d7s$1...@dont-email.me...
>>>>
>>>> "Scossa" <scos...@gmail.com> ha scritto nel messaggio
>>>> news:cbac8ed2-f4a5-4c51...@e27g2000vbu.googlegroups.com...
>>>> On 11 Feb, 17:48, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>>>>>
>>>>> Non brilla per concisione, ma mi pare funzioni:
>>>>>
>>>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
>>>>> "&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&"
>>>>> mesi -
>>>>> "&SE(B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&"
>>>>> giorni"
>>>>
>>>> Ripeto la risposta sperando che almeno questa "arrivi" (la precedente
>>>> è di oltre un'ora e ancora non si vede).
>>>>
>>>> Ok, sembra buona, l'ho aggiustata per mettere i ";" nell'output come
>>>> richiesto:
>>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
>>>> "&MESE(B1)-MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))+(MESE(B1)-
>>>> MESE(A1)-(B1<DATA(ANNO(B1);MESE(B1);GIORNO(A1)))<0)*12&" mesi; "&SE(B1-
>>>> DATA(ANNO(B1);MESE(B1);GIORNO(A1))<0;B1-
>>>> DATA(ANNO(B1);MESE(B1)-1;GIORNO(A1));B1-
>>>> DATA(ANNO(B1);MESE(B1);GIORNO(A1)))&" giorni"
>>>>
>>>> verifico alcune date ma direi che i 3 punti (e l'onere del prossimo
>>>> quiz) sono tuoi.
>>>>
>>>> E adesso vediamo di accorcirla! sono 333 caratteri, direi che si può
>>>> scendere.
>>>>
>>>> Bye!
>>>> scossa
>>>>
>>>> **************************************
>>>>
>>>> In attesa dei tagliatori di teste, cominciamo a scendere qualcosa (241):
>>>>
>>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni -
>>>> "&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
>>>> mesi - "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
>>>> giorni"
>>>>
>>>> Ciao,
>>>> E.
>>>>
>>>
>>> Con il ";" invece del trattino (239):
>>>
>>> =ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
>>> "&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
>>> mesi; "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
>>> giorni"
>>>
>>
>> Questa è da 206, ma bisogna verificare che funzioni sempre bene... :-)
>>
>> =RESTO(ANNO(B1-A1+2);100)&" anni;
>> "&MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+(MESE(A1)+(GIORNO(B1)<GIORNO(A1))>MESE(B1))*12&"
>> mesi; "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&"
>> giorni"
>>
>
> Sì, il metodo funziona.
> Questa accorcia ancora qualcosa (172)
>
> =RESTO(ANNO(B1-A1+2);100)&" anni;
> "&RESTO(MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+12;12)&" mesi;
> "&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&" giorni"

15/8/1979 14/8/1980 --> 1, 11, 30 (0, 11, 30)
29/2/2012 28/2/2013 --> 1, 11, 30 (1, 0, 0)

Salvo abbia mal copiato e mal tradotto la formula.

Bruno


Scossa

unread,
Feb 12, 2012, 11:24:02 AM2/12/12
to
On 12 Feb, 16:23, Bruno Campanini <bruno...@libero.it> wrote:
>
> 15/8/1979  14/8/1980   -->   1, 11, 30  (0, 11, 30)
> 29/2/2012  28/2/2013   -->   1, 11, 30  (1, 0, 0)
>
> Salvo abbia mal copiato e mal tradotto la formula.
>

Ciao Bruno,

hai ragione, purtroppo gestire i bisestili lato formule è davvero
dura.

Vediamo se qualcuno propone una soluzione.

Bye!
scossa

plinius

unread,
Feb 12, 2012, 2:22:43 PM2/12/12
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:4f37d976$0$1389$4faf...@reader1.news.tin.it...
Hai ragione Bruno, in quei casi sbaglia.
Ma invoco le attenuanti generiche perché è colpa di excel che, sbagliando,
tratta il 1900 come bisestile mentre non lo era.

Dunque tornerei a questa da 205:

=ANNO(B1)-ANNO(A1)-(B1<DATA(ANNO(B1);MESE(A1);GIORNO(A1)))&" anni;
"&RESTO(MESE(B1)-MESE(A1)-(GIORNO(B1)<GIORNO(A1))+12;12)&" mesi;
"&B1-DATA(ANNO(B1);MESE(B1)-(GIORNO(B1)<GIORNO(A1));GIORNO(A1))&" giorni"

Dovrebbe azzeccarci: via ai test!! :-)


Scossa

unread,
Feb 12, 2012, 2:45:46 PM2/12/12
to
On 12 Feb, 20:22, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "Bruno Campanini" <bruno...@libero.it> ha scritto nel messaggionews:4f37d976$0$1389$4faf...@reader1.news.tin.it...
>
>
>
>
>
>
>
>
>
> > plinius was thinking very hard :
> >> "plinius" <punto.linea...@LEVARElibero.it> ha scritto nel messaggio
> >>news:jh6ph6$nl9$1...@dont-email.me...
>
> >>> "plinius" <punto.linea...@LEVARElibero.it> ha scritto nel messaggio
> >>>news:jh6o1b$f9u$1...@dont-email.me...
>
> >>>> "plinius" <punto.linea...@LEVARElibero.it> ha scritto nel messaggio
> >>>>news:jh6nln$d7s$1...@dont-email.me...
>
> >>>>> "Scossa" <scossa...@gmail.com> ha scritto nel messaggio
Non ancora:
29/02/2012 28/02/2013 0 anni;11 mesi;30 giorni

Bruno Campanini

unread,
Feb 12, 2012, 2:56:44 PM2/12/12
to
plinius formulated on Sunday :

> Hai ragione Bruno, in quei casi sbaglia.
> Ma invoco le attenuanti generiche perché è colpa di excel che, sbagliando,
> tratta il 1900 come bisestile mentre non lo era.

Premio Oscar per il miglior film in lingua straniera:
============================================
Public Function DayDiff(DataIni As Date, DataFin As Date) As String
Dim y As Integer, m As Integer, d As Integer
Dim dateY As Date, dateM As Date, dateD As Date

y = DateDiff("yyyy", DataIni, DataFin)
If DateAdd("yyyy", y, DataIni) > DataFin Then
y = y - 1
End If
dateY = DateAdd("yyyy", y, DataIni)

m = DateDiff("m", dateY, DataFin)
If DateAdd("m", m, dateY) > DataFin Then
m = m - 1
End If
dateM = DateAdd("m", m, dateY)

d = DateDiff("d", dateM, DataFin)
DayDiff = y & "," & m & "," & d

End Function
============================================

Bruno


Scossa

unread,
Feb 12, 2012, 4:08:18 PM2/12/12
to
On 12 Feb, 20:56, Bruno Campanini <bruno...@libero.it> wrote:

> Premio Oscar per il miglior film in lingua straniera:
> ============================================
> Public Function DayDiff(DataIni As Date, DataFin As Date) As String
> Dim y As Integer, m As Integer, d As Integer
> Dim dateY As Date, dateM As Date, dateD As Date
>
> y = DateDiff("yyyy", DataIni, DataFin)
> If DateAdd("yyyy", y, DataIni) > DataFin Then
>     y = y - 1
> End If
> dateY = DateAdd("yyyy", y, DataIni)
>
> m = DateDiff("m", dateY, DataFin)
> If DateAdd("m", m, dateY) > DataFin Then
>     m = m - 1
> End If
> dateM = DateAdd("m", m, dateY)
>
> d = DateDiff("d", dateM, DataFin)
> DayDiff = y & "," & m & "," & d
>
> End Function
> ============================================
>


Davvero geniale!! GRANDE!!!!

Ma la soluzione VBA non vale per il quiz! :-)

eliano

unread,
Feb 12, 2012, 4:35:54 PM2/12/12
to
> Ma la soluzione VBA non vale per il quiz! :-)- Nascondi testo citato
>
> - Mostra testo citato -

+1
Vuol dire che a questo giro i gatti andranno scalzi.:-))
Eliano

plinius

unread,
Feb 13, 2012, 8:40:18 AM2/13/12
to

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:f9311478-b146-4028...@f30g2000yqh.googlegroups.com...
****************************

Ho paura che ciò che, alla fine, vorremmo ottenere come risultato, non sia
univocamente definito e presti il fianco a interpretazioni ambigue.
Per esempio con queste date:
Data_In DataFi Scossa Bruno Enrico
27/02/2012 28/02/2013 1, 0, 1 1, 0, 1 1, 0, 1
28/02/2012 28/02/2013 1, 0, 0 1, 0, 0 1, 0, 0
29/02/2012 28/02/2013 1, 0, 0 1, 0, 0 0, 11, 30
01/03/2012 28/02/2013 0, 11, 27 0, 11, 27 0, 11, 27

È logico che a partire dal 28/02/2012 o dal 29/02/2012 si ottenga il
medesimo risultato?
Davvero non c'è da avere certezze su come impostare il ragionamento... e
molto probabilmente è proprio questo il motivo per il quale excel non
disponga di una funzione di questo tipo!

Anche partendo dal giorno 29 di un anno bisestile ci si imbatte in
ragionamenti confusi:
Data_In DataFi Scossa Bruno Enrico
29/02/2012 28/02/2013 1, 0, 0 1, 0, 0 0, 11, 30
29/02/2012 27/02/2013 0, 11, 30 0, 11, 29 0, 11, 29
29/02/2012 26/02/2013 0, 11, 29 0, 11, 28 0, 11, 28
29/02/2012 25/02/2013 0, 11, 28 0, 11, 27 0, 11, 27
29/02/2012 24/02/2013 0, 11, 27 0, 11, 26 0, 11, 26
29/02/2012 23/02/2013 0, 11, 26 0, 11, 25 0, 11, 25
29/02/2012 22/02/2013 0, 11, 25 0, 11, 24 0, 11, 24
29/02/2012 21/02/2013 0, 11, 24 0, 11, 23 0, 11, 23
29/02/2012 20/02/2013 0, 11, 23 0, 11, 22 0, 11, 22
29/02/2012 19/02/2013 0, 11, 22 0, 11, 21 0, 11, 21
29/02/2012 18/02/2013 0, 11, 21 0, 11, 20 0, 11, 20
29/02/2012 17/02/2013 0, 11, 20 0, 11, 19 0, 11, 19
29/02/2012 16/02/2013 0, 11, 19 0, 11, 18 0, 11, 18
29/02/2012 15/02/2013 0, 11, 18 0, 11, 17 0, 11, 17
29/02/2012 14/02/2013 0, 11, 17 0, 11, 16 0, 11, 16
29/02/2012 13/02/2013 0, 11, 16 0, 11, 15 0, 11, 15
29/02/2012 12/02/2013 0, 11, 15 0, 11, 14 0, 11, 14
29/02/2012 11/02/2013 0, 11, 14 0, 11, 13 0, 11, 13
29/02/2012 10/02/2013 0, 11, 13 0, 11, 12 0, 11, 12
29/02/2012 09/02/2013 0, 11, 12 0, 11, 11 0, 11, 11
29/02/2012 08/02/2013 0, 11, 11 0, 11, 10 0, 11, 10
29/02/2012 07/02/2013 0, 11, 10 0, 11, 9 0, 11, 9
29/02/2012 06/02/2013 0, 11, 9 0, 11, 8 0, 11, 8
29/02/2012 05/02/2013 0, 11, 8 0, 11, 7 0, 11, 7
29/02/2012 04/02/2013 0, 11, 7 0, 11, 6 0, 11, 6
29/02/2012 03/02/2013 0, 11, 6 0, 11, 5 0, 11, 5
29/02/2012 02/02/2013 0, 11, 5 0, 11, 4 0, 11, 4
29/02/2012 01/02/2013 0, 11, 4 0, 11, 3 0, 11, 3
29/02/2012 31/01/2013 0, 11, 3 0, 11, 2 0, 11, 2
29/02/2012 30/01/2013 0, 11, 2 0, 11, 1 0, 11, 1
29/02/2012 29/01/2013 0, 11, 1 0, 11, 0 0, 11, 0
29/02/2012 28/01/2013 0, 11, 0 0, 10, 30 0, 10, 30
29/02/2012 27/01/2013 0, 10, 30 0, 10, 29 0, 10, 29
29/02/2012 26/01/2013 0, 10, 29 0, 10, 28 0, 10, 28

Francamente non ho le idee chiare, e voi?

Ciao,
E.



Bruno Campanini

unread,
Feb 13, 2012, 10:02:29 AM2/13/12
to
eliano presented the following explanation :

> Vuol dire che a questo giro i gatti andranno scalzi.:-))
> Eliano

Se ne scopre sempre di nuove...

http://theexceladdict.com//_t/t040303.htm

Bruno


Scossa

unread,
Feb 13, 2012, 9:48:22 AM2/13/12
to
On 13 Feb, 14:40, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> Ho paura che ciò che, alla fine, vorremmo ottenere come risultato, non sia
> univocamente definito e presti il fianco a interpretazioni ambigue.
> Per esempio con queste date:
> Data_In     DataFi       Scossa       Bruno        Enrico
> 27/02/2012  28/02/2013   1,  0,  1    1,  0,  1    1,  0,  1
> 28/02/2012  28/02/2013   1,  0,  0    1,  0,  0    1,  0,  0
> 29/02/2012  28/02/2013   1,  0,  0    1,  0,  0    0, 11, 30
> 01/03/2012  28/02/2013   0, 11, 27    0, 11, 27    0, 11, 27
>
> È logico che a partire dal 28/02/2012 o dal 29/02/2012 si ottenga il
> medesimo risultato?

Condivido pienamente la tua analisi, in effetti avevo fatto la stessa
riflessione.

A questo punto direi, salvo pareri contrari, di annullare il quiz e
lasciare comunqe a te il piacere di proporne uno nuovo :-)

Bye!
scossa

plinius

unread,
Feb 13, 2012, 10:47:10 AM2/13/12
to

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:c97257fd-af69-419a...@k40g2000yqf.googlegroups.com...

Condivido pienamente la tua analisi, in effetti avevo fatto la stessa
riflessione.

A questo punto direi, salvo pareri contrari, di annullare il quiz e
lasciare comunqe a te il piacere di proporne uno nuovo :-)

Bye!
scossa

***********************************

Comunque, per quel che può valere, usando la formula (nascosta) di excel:

=DATA.DIFF(A3;B3;"y") & ", " & DATA.DIFF(A3;B3;"ym") & ", " &
DATA.DIFF(A3;B3;"md")

si ottiene sempre lo stesso risultato della formula che avevo proposto:

=ANNO(B3)-ANNO(A3)-(B3<DATA(ANNO(B3);MESE(A3);GIORNO(A3)))&",
"&RESTO(MESE(B3)-MESE(A3)-(GIORNO(B3)<GIORNO(A3))+12;12)&",
"&B3-DATA(ANNO(B3);MESE(B3)-(GIORNO(B3)<GIORNO(A3));GIORNO(A3))

Il che non fa venir meno nessuna delle perpplessità sollevate prima... :-)

Ciao,
E.


eliano

unread,
Feb 13, 2012, 10:58:53 AM2/13/12
to

Bruno Campanini

unread,
Feb 13, 2012, 11:58:19 AM2/13/12
to
plinius laid this down on his screen :

> Comunque, per quel che può valere, usando la formula (nascosta) di excel:
>
> =DATA.DIFF(A3;B3;"y") & ", " & DATA.DIFF(A3;B3;"ym") & ", " &
> DATA.DIFF(A3;B3;"md")
>
> si ottiene sempre lo stesso risultato della formula che avevo proposto:
>
> =ANNO(B3)-ANNO(A3)-(B3<DATA(ANNO(B3);MESE(A3);GIORNO(A3)))&",
> "&RESTO(MESE(B3)-MESE(A3)-(GIORNO(B3)<GIORNO(A3))+12;12)&",
> "&B3-DATA(ANNO(B3);MESE(B3)-(GIORNO(B3)<GIORNO(A3));GIORNO(A3))
>
> Il che non fa venir meno nessuna delle perpplessità sollevate prima... :-)

Sì, in effetti:
(29-02-12 01-03-13) --> 1, 0, 0 in luogo di 1, 0, 1
(29-02-12 28-02-13) --> 0,11,30 in luogo di 1, 0, 0

Però con quella formula (DATEDIF) si può manovrare molto meglio e
cercar di correggere il risultato quando la data iniziale è il 29/2 (mi
pare che in altri casi il tutto funzioni regolarmente).
La stessa cosa potresti fare con la tua formula.

Altrimenti usa quella in lingua straniera...

Bruno


Bruno Campanini

unread,
Feb 13, 2012, 12:02:57 PM2/13/12
to
Bruno Campanini explained on 13-02-12 :

> Sì, in effetti:
> (29-02-12 01-03-13) --> 1, 0, 0 in luogo di 1, 0, 1
> (29-02-12 28-02-13) --> 0,11,30 in luogo di 1, 0, 0
>
> Però con quella formula (DATEDIF) si può manovrare molto meglio e cercar di
> correggere il risultato quando la data iniziale è il 29/2 (mi pare che in
> altri casi il tutto funzioni regolarmente).
> La stessa cosa potresti fare con la tua formula.
>
> Altrimenti usa quella in lingua straniera...

La quale, dimenticavo, dà errore in:
(28-02-12 28-02-13) --> 1,0,0 in luogo di 1,0,1
cosa che correggerò in serata.

Bruno


plinius

unread,
Feb 13, 2012, 1:15:12 PM2/13/12
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:4f39423f$0$1389$4faf...@reader2.news.tin.it...
Non ti seguo
(28-02-12 28-02-13) --> 1,0,0 in luogo di 1,0,1
questa dovrebbe dare proprio 1,0,0 (e non 1,0,1), perché parli di errore?

Per quanto riguarda la modifica della mia formula non mi pare abbia molto
senso.
Bisognerebbe farla crescere a dismisura solo per il gusto di avere una
formula unica?
Le alternative a portata di mano (più formule o UDF) sono sicuramente da
preferire.

Ciao,
E.


eliano

unread,
Feb 13, 2012, 1:17:31 PM2/13/12
to
Ottimo Bruno, cosi' facciamo rabbia a Rick.:-))

Function YMD(StartDate As Date, EndDate As Date) _
As String 'by Rick Rothstein
Dim TempDate As Date
Dim NumOfYears As Long
Dim NumOfMonths As Long
Dim NumOfWeeks As Long
Dim NumOfDays As Long
Dim NumOfHMS As Double
Dim TSerial1 As Double
Dim TSerial2 As Double
NumOfYears = DateDiff("yyyy", StartDate, EndDate)
TSerial1 = TimeSerial(Hour(StartDate), _
Minute(StartDate), Second(StartDate))
TSerial2 = TimeSerial(Hour(EndDate), _
Minute(EndDate), Second(EndDate))
NumOfHMS = 24 * (TSerial2 - TSerial1)
If NumOfHMS < 0 Then
NumOfHMS = NumOfHMS + 24
EndDate = DateAdd("d", -1, EndDate)
End If
StartDate = DateSerial(Year(EndDate), _
Month(StartDate), Day(StartDate))
If StartDate > EndDate Then
StartDate = DateAdd("yyyy", -1, StartDate)
NumOfYears = NumOfYears - 1
End If
NumOfMonths = DateDiff("m", StartDate, EndDate)
StartDate = DateSerial(Year(EndDate), _
Month(EndDate), Day(StartDate))
If StartDate > EndDate Then
StartDate = DateAdd("m", -1, StartDate)
NumOfMonths = NumOfMonths - 1
End If
NumOfDays = Abs(DateDiff("d", StartDate, EndDate))
YMD = CStr(NumOfYears) & " year" & _
IIf(NumOfYears = 1, "", "s")
YMD = YMD & ", "
YMD = YMD & CStr(NumOfMonths) & " month" & _
IIf(NumOfMonths = 1, "", "s")
YMD = YMD & ", "
YMD = YMD & CStr(NumOfDays) & " day" & _
IIf(NumOfDays = 1, "", "s")
End Function

Ciao
Eliano

plinius

unread,
Feb 13, 2012, 1:50:30 PM2/13/12
to

"eliano" <falini...@virgilio.it> ha scritto nel messaggio
news:ec30a022-86a6-4ca4...@l14g2000vbe.googlegroups.com...
************************

Eliano, questa di Rick Rothstein segue una logica del tutto diversa e
restituisce risultati che poco hanno in comune con quelli della funzione
DATA.DIFF
Per esempio:
29/02/2012 28/02/2013 0, 11, 27

29/02/2012 01/02/2013 0, 11, 0


Ma confermo che secondo me non sono sufficientemente chiari i risultati
voluti

Ciao,
E.


Bruno Campanini

unread,
Feb 13, 2012, 3:14:26 PM2/13/12
to
Bruno Campanini wrote on 13-02-12 :

> La quale, dimenticavo, dà errore in:
> (28-02-12 28-02-13) --> 1,0,0 in luogo di 1,0,1
> cosa che correggerò in serata.

Riflettendoci, penso che non farò proprio niente... e dopo questa
subentrerà in me l'oblio degli anni, mesi giorni.

Sì perché stiamo ragionando in termini di elementi di conto certi
(giorni) mischiati ad elementi di conto ambigui (anni, mesi...
settimane).

Le formule di Excel (DateAdd) dicono che
30/3 + 1 mese = 30/4, così come
31/3 + 1 mese = 30/4.

Analogamente
28/2 + 1 anno = 28/2, così come
29/2 + 1 anno = 28/2

and so on...

Buon divertimento a tutti.

Bruno


plinius

unread,
Feb 13, 2012, 3:19:45 PM2/13/12
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:4f396f20$0$1375$4faf...@reader1.news.tin.it...
Saggia decisione :-)


eliano

unread,
Feb 13, 2012, 3:46:59 PM2/13/12
to
On 13 Feb, 21:19, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "Bruno Campanini" <bruno...@libero.it> ha scritto nel messaggionews:4f396f20$0$1375$4faf...@reader1.news.tin.it...
> Saggia decisione :-)- Nascondi testo citato
>
> - Mostra testo citato -

Non insisto, sarebbe troppo velleitario.
Con la maxima (e consueta) cordialita'
Eliano

eliano

unread,
Feb 13, 2012, 5:08:55 PM2/13/12
to
> Eliano- Nascondi testo citato
>
> - Mostra testo citato -

Scusate, non e' per insistere, ma non vedo il post.

Grosso modo era cosi':

Beccati questa:

Function Age(Date1 As Date, Date2 As Date) As String
Dim Y As Integer
Dim M As Integer
Dim D As Integer
Dim Temp1 As Date
Temp1 = DateSerial(Year(Date2), Month(Date1), Day(Date1))
Y = Year(Date2) - Year(Date1) + (Temp1 > Date2)
M = Month(Date2) - Month(Date1) - (12 * (Temp1 > Date2))
D = Day(Date2) - Day(Date1)
If D < 0 Then
M = M - 1
D = Day(DateSerial(Year(Date2), Month(Date2), 0)) + D
End If
Age = Y & " anni " & M & " mesi " & D & " giorni "
End Function

Eliano

Andrea.9

unread,
Feb 23, 2012, 12:48:49 PM2/23/12
to
> A questo punto direi, salvo pareri contrari, di annullare il quiz e
> lasciare comunqe a te il piacere di proporne uno nuovo :-)

Allora gente ?!?!?!?
cosa abbiamo deciso? ;-)
ciao a tutti
andrea

Previ

unread,
Mar 23, 2012, 4:30:03 AM3/23/12
to
Il 11/02/2012 16.02, Scossa ha scritto:
> Allora, visto che la soluzione di Barbara per trovare anni mesi e
> giorni trascorsi tra due date:
> =ANNO(B2)-ANNO(A2)-(MESE(B2)<MESE(A2))&" anni ;
> "&12*(MESE(B2)<MESE(A2))+MESE(B2)-MESE(A2)-(GIORNO(B2)<GIORNO(A2))&"
> mesi; "&DATA(ANNO(B2);MESE(B2);GIORNO(B2))-DATA(ANNO(B2);MESE(B2)-
> (GIORNO(B2)<GIORNO(A2));GIORNO(A2))&" giorni"
>
> in alcuni casi fallisce:
>
> data in. data fine tempo
> 01/01/2011 01/01/2012 1 anni; 0 mesi; 0 giorni OK
> 01/01/2011 01/01/2012 1 anni; 1 mesi; 11 giorni OK
> 19/01/1979 04/01/2012 33 anni ; -1 mesi; 16 giorni FAULT!
>
> Trovare una formula alternativa che sia corretta e restituisca la
> stringa:
> n anni; n mesi; n giorni
> rappresentante la differenza tra data fine e data in.
>
> Non sono ammesse colonne/celle di appoggio, ne' l'uso di nomi.

Nella seconda riga, per ottenere 1 anni; 1 mese; 11 giorni
non dovrebbe essere questa data:
01/01/2011 12/02/2012 1 anni; 1 mesi; 11 giorni OK

Poi come si risolve con la terza riga?

Ciao.

Scossa

unread,
Mar 23, 2012, 8:40:16 AM3/23/12
to
On 23 Mar, 09:30, Previ <preziusov...@TOGLIQUESTOgmail.com> wrote:
> Nella seconda riga, per ottenere 1 anni; 1 mese; 11 giorni
> non dovrebbe essere questa data:
> 01/01/2011      12/02/2012      1 anni; 1 mesi; 11 giorni       OK

Sì, ho sbagliato il copia incolla.

>
> Poi come si risolve con la terza riga?
>
questi risultati con DATA.DIFF
={DATA.DIFF(A1;B1;{"y";"ym";"md"})}
01/01/2011 01/01/2012 1 0 0
19/01/1979 04/01/2012 32 11 16
01/01/2011 12/02/2012 1 1 11

Questi la mia formula senza colonna di appoggio come da Quiz (279
caratteri):
=INT(convert((B6-A6+1);"day";"yr")) &" anni; "&INT(convert(convert((B6-
A6+1);"day";"yr")-INT(convert((B6-A6+1);"day";"yr"));"yr";"day")/
30,4375)&" mesi; "&SE((GIORNO(B6)-GIORNO(A6))<0;
GIORNO(DATA(ANNO(B6);MESE(B6);0))+(GIORNO(B6)-GIORNO(A6));(GIORNO(B6)-
GIORNO(A6))) & " giorni"
01/01/2011 01/01/2012 1 anni; 0 mesi; 0 giorni
19/01/1979 04/01/2012 32 anni; 11 mesi; 16 giorni

Previ

unread,
Mar 23, 2012, 9:53:10 AM3/23/12
to
Il 23/03/2012 13.40, Scossa ha scritto:
> On 23 Mar, 09:30, Previ<preziusov...@TOGLIQUESTOgmail.com> wrote:
>> Nella seconda riga, per ottenere 1 anni; 1 mese; 11 giorni
>> non dovrebbe essere questa data:
>> 01/01/2011 12/02/2012 1 anni; 1 mesi; 11 giorni OK
>
> Sě, ho sbagliato il copia incolla.
>
>>
>> Poi come si risolve con la terza riga?
>>
> questi risultati con DATA.DIFF
> ={DATA.DIFF(A1;B1;{"y";"ym";"md"})}
> 01/01/2011 01/01/2012 1 0 0
> 19/01/1979 04/01/2012 32 11 16
> 01/01/2011 12/02/2012 1 1 11
>
> Questi la mia formula senza colonna di appoggio come da Quiz (279
> caratteri):
> =INT(convert((B6-A6+1);"day";"yr"))&" anni;"&INT(convert(convert((B6-
> A6+1);"day";"yr")-INT(convert((B6-A6+1);"day";"yr"));"yr";"day")/
> 30,4375)&" mesi;"&SE((GIORNO(B6)-GIORNO(A6))<0;
> GIORNO(DATA(ANNO(B6);MESE(B6);0))+(GIORNO(B6)-GIORNO(A6));(GIORNO(B6)-
> GIORNO(A6)))& " giorni"
> 01/01/2011 01/01/2012 1 anni; 0 mesi; 0 giorni
> 19/01/1979 04/01/2012 32 anni; 11 mesi; 16 giorni
> 01/01/2011 12/02/2012 1 anni; 1 mesi; 11 giorni

Immagino che le due formule non sono compatibili con Excel 2007, vero?
Ciao.

Scossa

unread,
Mar 24, 2012, 7:44:20 AM3/24/12
to
On 23 Mar, 14:53, Previ <preziusov...@TOGLIQUESTOgmail.com> wrote:
>
> Immagino che le due formule non sono compatibili con Excel 2007, vero?

Con Excel 2007 DATA.DIFF fornisce risultati incoerenti, mentre la
formula è ok (cambiando convert in CONVERTI), in questo esempio
riferita a date in A6 e B6:
=INT(CONVERTI((B6-A6+1);"day";"yr")) &" anni;
"&INT(CONVERTI(CONVERTI((B6-A6+1);"day";"yr")-INT(CONVERTI((B6-
A6+1);"day";"yr"));"yr";"day")/30,4375)&" mesi; "&SE((GIORNO(B6)-
GIORNO(A6))<0;GIORNO(DATA(ANNO(B6);MESE(B6);0))+(GIORNO(B6)-
GIORNO(A6));(GIORNO(B6)-GIORNO(A6))) & " giorni"

Bye!
scossa

Previ

unread,
Mar 24, 2012, 9:49:45 AM3/24/12
to
Il 24/03/2012 12.44, Scossa ha scritto:
> On 23 Mar, 14:53, Previ<preziusov...@TOGLIQUESTOgmail.com> wrote:
>>
>> Immagino che le due formule non sono compatibili con Excel 2007, vero?
>
> Con Excel 2007 DATA.DIFF fornisce risultati incoerenti, mentre la
> formula č ok (cambiando convert in CONVERTI), in questo esempio
> riferita a date in A6 e B6:
> =INT(CONVERTI((B6-A6+1);"day";"yr"))&" anni;
> "&INT(CONVERTI(CONVERTI((B6-A6+1);"day";"yr")-INT(CONVERTI((B6-
> A6+1);"day";"yr"));"yr";"day")/30,4375)&" mesi;"&SE((GIORNO(B6)-
> GIORNO(A6))<0;GIORNO(DATA(ANNO(B6);MESE(B6);0))+(GIORNO(B6)-
> GIORNO(A6));(GIORNO(B6)-GIORNO(A6)))& " giorni"
>
> Bye!
> scossa

Sě, grazie. Adesso funziona, quindi il risultato č:
32 anni;11 mesi;16 giorni
Non capisco perchč devono cambiare le formule ad ogni versione dei
programmi.
Ciao.

Scossa

unread,
Mar 24, 2012, 10:03:43 AM3/24/12
to
On 24 Mar, 14:49, Previ <preziusov...@TOGLIQUESTOgmail.com> wrote:
> Il 24/03/2012 12.44, Scossa ha scritto:
>
> > On 23 Mar, 14:53, Previ<preziusov...@TOGLIQUESTOgmail.com>  wrote:
>
> >> Immagino che le due formule non sono compatibili con Excel 2007, vero?
>
> > Con Excel 2007 DATA.DIFF fornisce risultati incoerenti, mentre la
> > formula è ok (cambiando convert in CONVERTI), in questo esempio
> > riferita a date in A6 e B6:
> > =INT(CONVERTI((B6-A6+1);"day";"yr"))&" anni;
> > "&INT(CONVERTI(CONVERTI((B6-A6+1);"day";"yr")-INT(CONVERTI((B6-
> > A6+1);"day";"yr"));"yr";"day")/30,4375)&" mesi;"&SE((GIORNO(B6)-
> > GIORNO(A6))<0;GIORNO(DATA(ANNO(B6);MESE(B6);0))+(GIORNO(B6)-
> > GIORNO(A6));(GIORNO(B6)-GIORNO(A6)))&  " giorni"
>
> > Bye!
> > scossa
>
> Sì, grazie. Adesso funziona, quindi il risultato è:
> 32 anni;11 mesi;16 giorni
> Non capisco perchè devono cambiare le formule ad ogni versione dei
> programmi.
> Ciao.

Inrealtà anche nella versione 2003 avrei dovuto usare CONVERTI,
accetta Convert perché ho inserito anche la libreiria delle funzioni
avanzate in inglese (ATPVBAEN).

Bye!
scossa
0 new messages