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

Numero seriale e orari (idee cofuse?)

1,111 views
Skip to first unread message

Pippo

unread,
Oct 31, 2005, 7:45:23 PM10/31/05
to
Sulla base dei molti post e link letti in questo NG, vorrei un vostro
conforto per sapere se ho le idee un po' piu' chiare su questo argomento a
me molto ostico.

Dunque.... in una cella scrivo ad es. il numero decimale 0,2 e poi applico
il formato "ora" per vedere a quale orario corrisponde quel numero,
ottenendo 4.48 AM.

Quindi il numero decimale 0,2 corrisponde all'ora 4.48 AM.

Cerco di capire come excel arriva a quel risultato:

0,2 * 24 = 4,80 (Moltiplico per 24 essendo le ore rappresentate come una
frazione del giorno)

Il numero decimale ottenuto (4,80) rappresenta le ore in centesimi, volendo
esprimerle in sessantesimi avro':

4h + (80 *60 /100) m = 4h + 48m

I miei calcoli si possono semplificare???

Pensate che ho ancora le idee confuse sull'argomento ... :-)) ??

--
Ciao e grazie a tutti
Pippo


Ivan

unread,
Oct 31, 2005, 11:48:11 PM10/31/05
to

"Pippo" <nos...@tin.it> ha scritto nel messaggio
news:eS$efxn3F...@TK2MSFTNGP15.phx.gbl...

Ciao Pippo,
le date e gli orari sono gestiti nel seguente modo:
1) la parte intera rappresenta il numero di giorni trascorsi dal 31
dicembre 1899.
Numeri positivi rappresentano date successive, e numeri negativi date
precedenti.

2) gli orari sono rappresentati nella parte decimale in frazione di giorni
espressa in secondi.
Quindi 1 secondo = 1(giorno) / 24(ore) / 60 (minuti) / 60 (secondi)

es. 0,5 = 12:00
dunque la formula giusta per la trasformazione in numero č:
=(ore / 24)+(min / (60*24))+(sec / (60*60*24))

(.. in tutto questo non credo di avere visto nessun riferimento a
trasformazioni di ore in centesimi ..)
la mia matematica si ferma qui, ma non č difficile eseguire la conversione
inversa per ricomporre l'orario originale (io lo faccio fare ad EXCEL!).


--
... spero di esserti stato d'aiuto,


--
--
/)/) IVAN (\/)
( '.') NMCBRMC ( '.' )
o(_('')('') (")(")_)*
Non Microsoft Certified But Regular
Microsoft Consumer

fernando cinquegrani

unread,
Nov 1, 2005, 2:02:11 AM11/1/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=eS$efxn3F...@TK2MSFTNGP15.phx.gbl

> Sulla base dei molti post e link letti in questo NG, vorrei un vostro
> conforto per sapere se ho le idee un po' piu' chiare su questo
> argomento a me molto ostico.
>
> Dunque.... in una cella scrivo ad es. il numero decimale 0,2 e poi
> applico il formato "ora" per vedere a quale orario corrisponde quel
> numero, ottenendo 4.48 AM.
>
> Quindi il numero decimale 0,2 corrisponde all'ora 4.48 AM.
>
> Cerco di capire come excel arriva a quel risultato:

forse le funzioni INT e RESTO ti possono aiutare

INT taglia la parte decimale
quindi
=INT(0,2) indica il numero di giorni compresi in 0,2 [0]
=INT(0,2/(1/24)) indica il numero di ore comprese in 0,2 [4]
=INT(0,2/(1/24/60)) indica il numero di minuti in 0,2 [288]
=INT(0,2/(1/24/60/60)) indica il numero di secondi in 0,2 [17280]

chiamando rispettivamente G, O, M e S i quattro valori avrò che 0,2
rappresenta G giorni, O-(G*24) ore, M-(O*60) minuti, S-(M*60) secondi
0 giorni, 4-(0*24) ore, 288-(4*60) minuti, 17280-(288*60) secondi
0 giorni, 4 ore, 48 minuti, 0 secondi

[1/24, 1/24/60, 1/24/60/60 sono rispettivamente il
numero di ore, di minuti e di secondi in un giorno:
possiamo indicarli anche con 1/24, 1/1440,1/86400]

se voglio tutto in una formula scriverò quindi
=INT(A1) & " giorni, "
& INT(A1/(1/24))-INT(0,2)*24 & " ore, "
& INT(A1/(1/1440))-INT(0,2/(1/24))*60 & " minuti, "
& INT(A1/(1/86400))-INT(0,2/(1/1440)) *60 & " secondi"

RESTO restituisce la parte decimale
quindi
=RESTO(0,2;1) è la quota su cui si calcolano le ore
=RESTO(0,2;1/24) è la quota su cui si calcolano i minuti
=RESTO(0,2;1/1440) è la quota su cui si calcolano i secondi

quindi
=INT(0,2) sono i giorni
=INT(RESTO(0,2;1)/(1/24)) sono le ore
=INT(RESTO(0,2;1/24)/(1/1440)) sono i minuti
=INT(RESTO(0,2;1/1440)/(1/86400)) sono i secondi

se voglio tutto in una formula scriverò quindi
=INT(A1) &" giorni, "
& INT(RESTO(A1;1)/(1/24)) &" ore, "
& INT(RESTO(A1;1/24)/(1/1440)) &" minuti ,"
& INT(RESTO(A1;1/1440)/(1/86400)) &" secondi"

spero di non averti confuso ulteriormente
.f

Pippo

unread,
Nov 1, 2005, 5:37:43 AM11/1/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:#XCw1Ir3...@TK2MSFTNGP09.phx.gbl...

> > Sulla base dei molti post e link letti in questo NG, vorrei un vostro
> > conforto per sapere se ho le idee un po' piu' chiare su questo
> > argomento a me molto ostico.
> > Dunque.... in una cella scrivo ad es. il numero decimale 0,2 e poi
> > applico il formato "ora" per vedere a quale orario corrisponde quel
> > numero, ottenendo 4.48 AM.
> > Quindi il numero decimale 0,2 corrisponde all'ora 4.48 AM.
> > Cerco di capire come excel arriva a quel risultato:
> forse le funzioni INT e RESTO ti possono aiutare

> INT taglia la parte decimale
> quindi
> =INT(0,2) indica il numero di giorni compresi in 0,2 [0]
> =INT(0,2/(1/24)) indica il numero di ore comprese in 0,2 [4]
> =INT(0,2/(1/24/60)) indica il numero di minuti in 0,2 [288]
> =INT(0,2/(1/24/60/60)) indica il numero di secondi in 0,2 [17280]

> chiamando rispettivamente G, O, M e S i quattro valori avrò che 0,2
> rappresenta G giorni, O-(G*24) ore, M-(O*60) minuti, S-(M*60) secondi
> 0 giorni, 4-(0*24) ore, 288-(4*60) minuti, 17280-(288*60) secondi
> 0 giorni, 4 ore, 48 minuti, 0 secondi

> [1/24, 1/24/60, 1/24/60/60 sono rispettivamente il
> numero di ore, di minuti e di secondi in un giorno:
> possiamo indicarli anche con 1/24, 1/1440,1/86400]

Dici che 1/24 e' il numero di ore in un giorno ????

Un "giorno" non equivale a 24h?

1g = 24h

Quindi:

1h=(1/24)g

Mi sfugge qualcosa???


> se voglio tutto in una formula scriverò quindi
> =INT(A1) & " giorni, "
> & INT(A1/(1/24))-INT(0,2)*24 & " ore, "
> & INT(A1/(1/1440))-INT(0,2/(1/24))*60 & " minuti, "
> & INT(A1/(1/86400))-INT(0,2/(1/1440)) *60 & " secondi"

> RESTO restituisce la parte decimale
> quindi
> =RESTO(0,2;1) è la quota su cui si calcolano le ore
> =RESTO(0,2;1/24) è la quota su cui si calcolano i minuti
> =RESTO(0,2;1/1440) è la quota su cui si calcolano i secondi

> quindi
> =INT(0,2) sono i giorni
> =INT(RESTO(0,2;1)/(1/24)) sono le ore
> =INT(RESTO(0,2;1/24)/(1/1440)) sono i minuti
> =INT(RESTO(0,2;1/1440)/(1/86400)) sono i secondi

> se voglio tutto in una formula scriverò quindi
> =INT(A1) &" giorni, "
> & INT(RESTO(A1;1)/(1/24)) &" ore, "
> & INT(RESTO(A1;1/24)/(1/1440)) &" minuti ,"
> & INT(RESTO(A1;1/1440)/(1/86400)) &" secondi"

> spero di non averti confuso ulteriormente

In effetti, non ho capito niente .. :-((... , credo di avere alcune carenze
di base in matematica....
cmq, grazie per la solita e *immensa disponibilita'*.

Ciao
Pippo


fernando cinquegrani

unread,
Nov 1, 2005, 5:58:59 AM11/1/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=uvF3c8s3...@TK2MSFTNGP12.phx.gbl

>> [1/24, 1/24/60, 1/24/60/60 sono rispettivamente il
>> numero di ore, di minuti e di secondi in un giorno:
>> possiamo indicarli anche con 1/24, 1/1440,1/86400]
>
> Dici che 1/24 e' il numero di ore in un giorno ????
> Un "giorno" non equivale a 24h?
> 1g = 24h
> Quindi:
> 1h=(1/24)g
> Mi sfugge qualcosa???

no. male io:
1, 1/24,1/1440,1/86400 sono
rispettivamente la durata di un giorno,
di un'ora, di un minuto, di un secondo in excel.
quindi int(0,2/(1/1440)), ad esempio, sarą il numero totale
di minuti presenti in 0,2 [giorni].

prova anche questa, che lascia intendere
la ricorsivitą del calcolo
(usa il debug, se hai familiaritą)

con Alt+F11 entri nell'editor vba
da menu: inserisci :: modulo
in modulo1 incolla

Option Base 1
Public Function sequences(x As Double, n As Variant, l() As Variant) As
String
Dim y As Long, i As Long, z As String
For i = 1 To UBound(n)
y = Int(x / (1 / n(i)))
x = x - y * (1 / n(i))
z = z & y & " " & l(i) & ", "
Next
sequences = Left(z, Len(z) - 2)
End Function


con Alt+F11 ritorni in excel
nella cella A1 inserisci
=CASUALE()*3
in B1
=sequences(A1;{1;24;1440;86400};{"giorni";"ore";"minuti";"secondi"})
Ctrl+Maiusc+Invio
in B2
=sequences(A1;{24;1440;86400};{"ore";"minuti";"secondi"})
Ctrl+Maiusc+Invio
in B3
=sequences(A1;{1440;86400};{"minuti";"secondi"}) Ctrl+Maiusc+Invio
in B4
=sequences(A1;{86400};{"secondi"}) Ctrl+Maiusc+Invio
in B5
=sequences(A1;{1440};{"minuti"}) Ctrl+Maiusc+Invio
ecc. ecc.

[puoi utilizzare la function per tradurre gradi centesimali
in gradi sessagesimali, ad esempio
=sequences(A1;{1;60};{"primi";"secondi"})
e operare altre trasformazioni dello stesso tipo]
.f


fernando cinquegrani

unread,
Nov 1, 2005, 6:35:38 AM11/1/05
to
[fernando cinquegrani] scrive in
http://www.google.it/groups?threadm=%23ITekNt...@TK2MSFTNGP12.phx.gbl
>
>
oops!
Public Function sequences(x As Double, n As Variant, l As Variant) As
String
su una sola riga
.f


Bruno Campanini

unread,
Nov 1, 2005, 6:50:39 AM11/1/05
to
"Pippo" <nos...@tin.it> wrote in message
news:eS$efxn3F...@TK2MSFTNGP15.phx.gbl...

[...]


> Quindi il numero decimale 0,2 corrisponde all'ora 4.48 AM.
> Cerco di capire come excel arriva a quel risultato:
> 0,2 * 24 = 4,80 (Moltiplico per 24 essendo le ore rappresentate come una
> frazione del giorno)
> Il numero decimale ottenuto (4,80) rappresenta le ore in centesimi,
> volendo
> esprimerle in sessantesimi avro':
> 4h + (80 *60 /100) m = 4h + 48m

Come Excel giunga a quel risultato io proprio non lo so,
ma come la mente umana ad esso pervenga per via logica
l'hai chiaramente esposto.
Complimenti.

Ciao
Bruno


fernando cinquegrani

unread,
Nov 2, 2005, 2:22:08 AM11/2/05
to
> Option Base 1
> Public Function sequences(x As Double, _
> n As Variant, l As Variant) As String

> Dim y As Long, i As Long, z As String
> For i = 1 To UBound(n)
> y = Int(x / (1 / n(i)))
> x = x - y * (1 / n(i))
> z = z & y & " " & l(i) & ", "
> Next
> sequences = Left(z, Len(z) - 2)
> End Function
>
nella cella A1 inserisci
=CASUALE()*1000
> in B1
=sequences(A1;{0,00277777777;0,033333333333;1;24;1440;86400;8640000;86400000};{"anni°";"mesi°";"giorni";"ore";"minuti";"secondi";"centesimi";"millesimi"})
[su una riga; inviare con Ctrl+Maiusc+Invio]
per avere una sequenza più completa
per anni° s'intendono gli anni standardizzati (360 giorni),
per mesi° s'intendono i mesi standardizzati (30 giorni).
i primi due valori corrispondono a 1/360 e 1/30, ossia
la durata di un giorno excel espresso in anni° o mesi°.
.f


fernando cinquegrani

unread,
Nov 2, 2005, 2:47:49 AM11/2/05
to
> In effetti, non ho capito niente .. :-((... , credo di avere alcune
> carenze di base in matematica....
> cmq, grazie per la solita e *immensa disponibilita'*.

personalmente penso che le difficoltà derivino dal
fatto che alteri la scala:

dici


0,2 * 24 = 4,80 (Moltiplico per 24 essendo le ore rappresentate come una
frazione del giorno)

Il numero decimale ottenuto (4,80) rappresenta le ore in centesimi,

fin qui è corretto 24 rappresenta il numero di ore in un giorno.
qui meno:


volendo esprimerle in sessantesimi avro':
4h + (80 *60 /100) m = 4h + 48m

meglio dire:
questo valore (4,80) è espresso in ore
prendo la parte intera 4
che costituiscono le ore come noi li rappresentiamo

considero la parte decimale 0,80 (non 80!)
e riprendo il ciclo con una misura d'ordine inferiore:

quindi:
0,80*60=48,00 (Moltiplico per 60 ossia il numero di minuti in un'ora)
questo valore (48,00) è espresso in minuti
prendo la parte intera 48
che costituiscono i minuti come noi li rappresentiamo

considero la parte decimale 0,00
e riprendo il ciclo con una misura d'ordine inferiore

0,00*60=0,00 (Moltiplico per 60 ossia il numero di secondi in un minuto)
questo valore (0,00) è espresso in secondi
prendo la parte intera 0
che costituiscono i minuti come noi li rappresentiamo

considero la parte decimale 0,00
e riprendo...
.f

fernando cinquegrani

unread,
Nov 2, 2005, 2:57:15 AM11/2/05
to
[fernando cinquegrani] scrive in
http://www.google.it/groups?threadm=%23GVUAH4...@tk2msftngp13.phx.gbl

> 0,00*60=0,00 (Moltiplico per 60 ossia il numero di secondi in un
> minuto) questo valore (0,00) è espresso in secondi
> prendo la parte intera 0

> che costituiscono *i minuti* come noi li rappresentiamo

naturalmente, *i secondi*.
nei cicli è il copia/incolla che ha le idee confuse :-)

Pippo

unread,
Nov 4, 2005, 5:13:56 PM11/4/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:#GVUAH43...@tk2msftngp13.phx.gbl

> > In effetti, non ho capito niente .. :-((... , credo di avere alcune
> > carenze di base in matematica....
> > cmq, grazie per la solita e *immensa disponibilita'*.

> personalmente penso che le difficoltà derivino dal
> fatto che alteri la scala:
>
> dici
> 0,2 * 24 = 4,80 (Moltiplico per 24 essendo le ore rappresentate come una
> frazione del giorno)
>
> Il numero decimale ottenuto (4,80) rappresenta le ore in centesimi,
>
> fin qui è corretto 24 rappresenta il numero di ore in un giorno.
> qui meno:
> volendo esprimerle in sessantesimi avro':
> 4h + (80 *60 /100) m = 4h + 48m

> meglio dire:
> questo valore (4,80) è espresso in ore
> prendo la parte intera 4
> che costituiscono le ore come noi li rappresentiamo

> considero la parte decimale 0,80 (non 80!)

Giusto, diciamo che io ho considerato 80/100 .... ;-)

> e riprendo il ciclo con una misura d'ordine inferiore:

> quindi:
> 0,80*60=48,00 (Moltiplico per 60 ossia il numero di minuti in un'ora)
> questo valore (48,00) è espresso in minuti
> prendo la parte intera 48
> che costituiscono i minuti come noi li rappresentiamo

Perfetto!!!

[cut]

Ciao Fernando, dopo questa tua *dettagliata* spiegazione, credo di avere le
idee *meno* confuse....:-))

Appena possibile (visto che ora ho le idee meno confuse), mi *rileggo* i
tuoi precedenti post in questo stesso thread, sperando, finalmente, di
capirci qualcosa... :-)

PS:

la mia domanda, prende spunto, dai seguenti link consigliati da Tiziano:

Gestione di date e orari in Excel e in Visual Basic Parte Prima e seconda
http://web.archive.org/web/20021206153842/http://www.microsoft.com/italy/off
ice/previous/2000/esperti/gestione_date/
I file lì indicati li potete scaricare da
http://www.lapalissiano.it/files/gestione_date.zip

in cui, a mio parere, non viene spiegato in modo chiaro (dando forse gia'
scontata la conoscenza dell'argomento) il passaggio da "numero decimale" a
rappres. "giorno_ora".

Integrando pero' la guida (che cmq ritengo ottima), con questa tua
lezioncina, credo che l'argomento si possa considerare abbastanza
sviscerato.....

Giusto?

Ciao e grazie 100000...
Pippo


fernando cinquegrani

unread,
Nov 4, 2005, 9:46:18 PM11/4/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=uVmjWvY4...@TK2MSFTNGP09.phx.gbl

> Appena possibile (visto che ora ho le idee meno confuse), mi
> *rileggo* i tuoi precedenti post in questo stesso thread, sperando,
> finalmente, di capirci qualcosa... :-)

vedi:
http://www.prodomosua.it/zips/propippo.xls
.f


Pippo

unread,
Nov 5, 2005, 3:40:04 PM11/5/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:OpNXdMb...@TK2MSFTNGP15.phx.gbl...

> vedi:
> http://www.prodomosua.it/zips/propippo.xls

Grazie Fernando, non ho parole!!!

Appena possibile, mi voglio "gustare" questo tuo foglio di esempio, che a
prima vista, sembra riepilogare in modo chiaro e ordinato, quanto hai
scritto in questo thread.

In caso di ulteriori dubbi e per approfondimenti, non manchero' di scrivere
in questo *splendido* NG (magari in questo stesso thread) sperando in un tuo
intervento. ;-)

In "Excel" mi piace molto risolvere problemi (che mi assegno da solo),
creare "modelli" che pero' in gran parte non utilizzo, perche' non ho la
pazienza di limitarmi al semplice caricamento di dati.

Capita anche a te :-)?

Ciao e grazie milleeeee!!
Pippo


Pippo

unread,
Nov 6, 2005, 6:10:31 AM11/6/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:OpNXdMb...@TK2MSFTNGP15.phx.gbl...

> vedi:
> http://www.prodomosua.it/zips/propippo.xls

Nel tuo file di esempio, i calcoli eseguiti partendo dai paramentri
(1;24;60;60;100;10) riesco a comprenderli;

quelli eseguiti con l'uso dei parametri (1;24;1440;86400;8640000;86400000)
*non* riesco proprio a seguirli.

Potresti darmi qualche ulteriore delucidazione col "cucchiaino" ? :-)

Ciao e grazie milleee..!
Pippo


fernando cinquegrani

unread,
Nov 6, 2005, 6:58:45 AM11/6/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=OmJ5LGs4...@tk2msftngp13.phx.gbl

>> vedi:
>> http://www.prodomosua.it/zips/propippo.xls
>
> Nel tuo file di esempio, i calcoli eseguiti partendo dai paramentri
> (1;24;60;60;100;10) riesco a comprenderli;
>
> quelli eseguiti con l'uso dei parametri
> (1;24;1440;86400;8640000;86400000) *non* riesco proprio a seguirli.

scrivi 10,2 in C1

usando la prima serie (1;24;60;...) modifico sempre la scala
dei resti in colonna C (come ti avevo mostrato in un altro post)
,2 sono giorni (che divido per il numero di ore in un giorno per
ottenere le ore)
,8 sono ore (che divido per il numero di minuti in un'ora per ottenere i
minuti)
,1 sono minuti (che divido...)
,1 sono secondi
,1 sono centesimi
al contrario usando la seconda serie (1;24;1440;...)
non modifico la scala dei resti (in colonna J)
,2 sono giorni (che divido per il numero di ore in un giorno per
ottenere le ore)
,03333 sono giorni (che divido per il numero di minuti in un giorno...
,000694 sono giorni (che divido per il numero di secondi in un giorno...
0,0000...sono giorni (che divido...)

il primo calcolo non solo è soggetto a più errori per il continuo
cambio della scala, ma anche (come ti scrivo) 'meno corretto'
perchè sto forzando le approssimazioni in termini di decimali
che excel può correttamente contenere.
nel primo caso io infatti moltiplico il numero originario e
fornisco al numero originario un'approssimazione che
non ha.
nel secondo caso mi limito invece a sottrarre le quantità
via via enucleate dal numero originario senza generare
decimali impropri
utilizzando la prima sequenza potrei continuare all'infinito
il calcolo (miliardesimi di secondo) su valori assolutamente
inesistenti nel numero originario ma generati solo dal modello
di calcolo.
[è questo il motivo per cui nel mio primo post ti
proponevo il secondo modello: considera sempre il
numero originario, sottrai a questo i valori calcolati
e considerane i resti...sempre e solo nella scala in cui
sono, ossia, secondo excel, in giorni:
più semplice e più corretto, quindi]
.f

Pippo

unread,
Nov 6, 2005, 7:36:10 AM11/6/05
to

"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:OxUh6ls4...@TK2MSFTNGP12.phx.gbl...

> [Pippo] scrive in
> http://www.google.it/groups?threadm=OmJ5LGs4...@tk2msftngp13.phx.gbl
> >> vedi:
> >> http://www.prodomosua.it/zips/propippo.xls
> >
> > Nel tuo file di esempio, i calcoli eseguiti partendo dai paramentri
> > (1;24;60;60;100;10) riesco a comprenderli;
> >
> > quelli eseguiti con l'uso dei parametri
> > (1;24;1440;86400;8640000;86400000) *non* riesco proprio a seguirli.
>
> scrivi 10,2 in C1
>
> usando la prima serie (1;24;60;...) modifico sempre la scala
> dei resti in colonna C (come ti avevo mostrato in un altro post)

> ,2 sono giorni (che divido per il numero di ore in un giorno per
> ottenere le ore)

Perche' usi il termine *divido*???
Non esegui il *prodotto* dei giorni (0,2g) * (24h) (formula =C4*B4)
ottenendo le ore?

> al contrario usando la seconda serie (1;24;1440;...)
> non modifico la scala dei resti (in colonna J)
> ,2 sono giorni (che divido per il numero di ore in un giorno per
> ottenere le ore)

In tal caso, le seguenti formule nelle celle J4 e K4

=J3-K3*(1/I3)

=INT(J4/(1/I4))

non mi sono molto chiare.

Ciao e grazie milleeeee
Pippo

fernando cinquegrani

unread,
Nov 6, 2005, 9:55:46 PM11/6/05
to
ciao pippo.
è dalle 7.10 di ieri che cerco di inviarti la risposta,
ma questa mi viene sistematicamente cancellata dal server
(viene considerata spam? sono sicuro che tiziano
troverà una spiegazione).
l'unico modo che ho trovato (ho cancellato alcune parole
'sensibili', ho riformattato in vario modo) è di inviarla come
allegato.
lo trovi in microsoft.test al thread 'pippo004'.
.f


Pippo

unread,
Nov 11, 2005, 4:04:03 PM11/11/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:urvUHb0...@TK2MSFTNGP09.phx.gbl...

Copia ed incollo parte della tua risposta, a cui chiedo un ulteriore
chiarimento...

>puoi usare indifferentemente queste o queste altre
>=J3-K3/I3 e =INT(J4*I4)

>J3 è il mio numero (10,2). prendo la parte intera della moltiplicazione
>per il numero di giorni in un giorno (1)
>=int(j3*1)...10
>[ovvero della divisione per il numero di parti del giorno che compongono
>un giorno (1/1)
>=int(j3/(1/1)...10]
>considero il resto J3-10/1....0,2 (in J4)
>[ovvero J3-10*(1/1)...0,2]

>J4 è il mio numero (0,2). prendo la parte intera della moltiplicazione
>per il numero di ore in un giorno (24)
>=int(J4*24)...4
>[ovvero della divisione per il numero di parti del giorno che compongono
>un'ora (1/24)
>=int(j4/(1/24))...4]

[cut]

La ripetitivita' dei calcoli e' chiara, quello che non entra nella mia testa
di "zucca" e' la dimostrazione del " Perche' " quelle formule, utilizzate
con quei parametri, portano al risultato corretto.

Cerco di spiegarmi meglio (forse.. :-)..):

Perche' quel "prodotto" (=INT(J4*I4))
e quel "resto" (=J3-K3/I3) rappresentano rispettivamente ad es. le "ore" ed
il numero su cui calcolare i minuti...ecc..??

Applicare una formula, senza riuscire a capire il " perche' " quella stessa
formula porta al risultato voluto, e' una qualcosa che mi rende mooolto
amareggiato...

PS:

Forse il quesito incomincia a diventare [OT], ma non ho idea quale NG o
quale sito poter consultare.

Consigli a riguardo?

Ciao ed ancora grazie per l'infinita disponibilita' verso una testa di
"zucca"!
Pippo


fernando cinquegrani

unread,
Nov 11, 2005, 6:21:05 PM11/11/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=ukUYDJw5...@TK2MSFTNGP10.phx.gbl

> Perche' quel "prodotto" (=INT(J4*I4))
> e quel "resto" (=J3-K3/I3) rappresentano rispettivamente ad es. le
> "ore" ed il numero su cui calcolare i minuti...ecc..??

mettiamo un attimo da parte le date.
parliamo di soldi, che sono cose più concrete.
per coprire una spesa di 3,85, dobbiamo passare da
misure espresso nel continuo a una misurazione per soglie:
l'euro sono monete da 2, 1, 0,5, 0,20, 0,10, 0,05.
[avro' bisogno di
=sequences(C1;{0,5;1;2;5;10;20};{" x 2 euro";" x 1 euro";" x 50 cent.";"
x 20 cent.";" x 10 cent.";" x 5 cent"})
ossia
1 x 2 euro, 1 x 1 euro, 1 x 50 cent., 1 x 20 cent., 1 x 10 cent., 1
x 5 cent.]
quante monete da 2 euro dobbiamo utilizzare?
due monete da 2 euro superano l'entità della spesa,
ne diamo 1 e consideriamo il resto da pagare: 1,85.
due monete da 1 euro superano l'importo.
ne diamo 1 e consideriamo il resto: 0,85
...
come vedi ogni volta che assegno una quantità
intera a una soglia, considero il resto nella
stessa unità di misura (euro) e la suddivido
per la soglia inferiore espressa sempre nella stessa
unità di misura.

il fatto che in un giorno ci siano 24 ore e in un'ora ci siano
60 minuti, non è diverso dal fatto che in una moneta di
1 euro ci siano 5 monete da 20 centesimi e che in
ciascuna di queste ci siano 4 monete da 5 centesimi.
nessuna importanza...se tutte le misure sono espresse
nella stessa scala.

se l'unità di misura è l'euro le soglie inferiori
(con cui valutare i resti) sono date da
0.50, 0.20, 0.10, 0.05.
se l'unità di misura è il giorno le soglie inferiori
(con cui valutare i resti) sono date da
1/24, 1/(24*60), 1/(24*60*60), 1/(24*60*60*100).

come facciano i bambini inglesi a prendere dimestichezza
con le loro scale strane non lo so.
un piede sono 12 pollici.
un miglio (63360 pollici) meno un pollice, come
si dice? ?? piedi e ?? pollici
sicuramente c'è un sistema semplice di spiegarlo. io
non lo conosco.
[norman, se ci leggi, spiegacelo]
[io farei
=sequences(C1;{0,0833333333333334;1};{" piedi";" pollici"})
ossia 5279 piedi, 11 pollici
(0,083... è 1/12)]
.f


Pippo

unread,
Nov 12, 2005, 3:12:37 PM11/12/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:u3P7hax5...@TK2MSFTNGP14.phx.gbl...

> > Perche' quel "prodotto" (=INT(J4*I4))
> > e quel "resto" (=J3-K3/I3) rappresentano rispettivamente ad es. le
> > "ore" ed il numero su cui calcolare i minuti...ecc..??

> mettiamo un attimo da parte le date.
> parliamo di soldi, che sono cose più concrete.
> per coprire una spesa di 3,85, dobbiamo passare da
> misure espresso nel continuo a una misurazione per soglie:
> l'euro sono monete da 2, 1, 0,5, 0,20, 0,10, 0,05.
> [avro' bisogno di

> =sequences(C1;{0,5;1;2;5;10;20};{" x 2 euro";" x 1 euro";" x 50 cent.";"
> x 20 cent.";" x 10 cent.";" x 5 cent"})
> ossia
> 1 x 2 euro, 1 x 1 euro, 1 x 50 cent., 1 x 20 cent., 1 x 10 cent., 1
> x 5 cent.]

Grazie Fernando, sei stato mooolto chiaro,... in effetti con gli "euro", il
ragionamento e' piu' intuitivo ...un'ultima domanda (forse.. :-).. ):

c'e' un motivo particolare per cui nella seguente funzione (perfettamente
funzionante) che hai suggerito, dichiari i due array "n" e "l" come tipo di
dato "Variant" ??

''''''''''''''''''''''''''''''''''''''

Public Function sequences(x As Double, n As Variant, l As Variant) As String


Dim y As Long, i As Long, z As String
For i = 1 To UBound(n)
y = Int(x / (1 / n(i)))
x = x - y * (1 / n(i))
z = z & y & " " & l(i) & ", "
Next
sequences = Left(z, Len(z) - 2)
End Function

'''''''''''''''''''''''''''''''''''''''''

fernando cinquegrani

unread,
Nov 12, 2005, 3:39:42 PM11/12/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=exZZ$Q85FH...@tk2msftngp13.phx.gbl

> c'e' un motivo particolare per cui nella seguente funzione
> (perfettamente funzionante) che hai suggerito, dichiari i due array
> "n" e "l" come tipo di dato "Variant" ??

> Public Function sequences(x As Double, n As Variant, l As Variant) As

non c'erano grandi possibilità di scelta :-)
dall'help (voce array):
Nota Una variabile di tipo Variant non dichiarata come matrice può
comunque includere una matrice.
.f


Pippo

unread,
Nov 12, 2005, 4:34:48 PM11/12/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:OxftEl85...@tk2msftngp13.phx.gbl...

Quindi, se ho ben capito, per passare come argomento di una "funzione" una
"matrice", non ci sono altre alternative?

Ciao e grazie milleeee
Pippo

fernando cinquegrani

unread,
Nov 12, 2005, 7:16:25 PM11/12/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=%23Bey2%2385FH...@TK2MSFTNGP12.phx.gbl

> Quindi, se ho ben capito, per passare come argomento di una
> "funzione" una "matrice", non ci sono altre alternative?

[ti rispondo solo perchè maurizio borrelli non
è nei paraggi :-)]
in una funzione utente non dovrebbe essere dichiarato il
tipo di un array perchè questo viene generato
automaticamente da vba.
Public Function (myarray) as double
è una dichiarazione corretta
[ma Public Function (myarray as variant) as double
non è sbagliata]
che tipo viene generato automaticamente da vba?
un variant?
in effetti ci sono due tipi di variant.

Public Function Varray(mypar) As Double
Dim j As Long, t As Double
For j = 1 To UBound(mypar)
t = t + mypar(j)
Next
Varray = t
End Function

scriverò =Varray({1;2;3}) per ottenere 6, la somma
dei tre valori.
ma se ho rispettivamente in A1, A2 e A3 1, 2 e 3
scrivendo =Varray(A1:A3)
ottengo un errore.
dovrò trattare questo tipo di array
[più vicino alla variabile oggetto e che
è in realtà un variant che contiene un
array di variant] in altro modo.

Public Function VVarray(mypar) As Double
Dim j As Long, t As Double
For j = 1 To mypar.Count
t = t + mypar(j, 1)
Next
VVarray = t
End Function

se scrivo ora =VVarray(A1:A3) ottengo il mio 6

il primo array è stato automaticamente creato a una dimensione,
il secondo bidemensionale.
poichè le funzioni *campano* di questo (della possibilità cioè
di utilizzare parametri con valori o con range) proviamo
a riscrivere sequences in modo che accetti le due possibilità:

Public Function sequences(x As Double, n, l) As String


Dim y As Long, i As Long, z As String

Dim nr As Long, mr As Long, nn As Variant, ll As Variant
If TypeOf n Is Range Then nr = n.Rows.Count Else nr = UBound(n)
ReDim nn(1 To nr)
ReDim ll(1 To nr)
For i = 1 To nr
If TypeOf n Is Range Then nn(i) = n(i, 1) Else nn(i) = n(i)
If TypeOf l Is Range Then ll(i) = l(i, 1) Else ll(i) = l(i)
y = Int(x / (1 / nn(i)))
x = x - y * (1 / nn(i))
z = z & y & " " & ll(i) & ", "


Next
sequences = Left(z, Len(z) - 2)
End Function

ora in pippo.xls è indifferente scrivere
=sequences(C1;{1;24;1440;86400;8640000;86400000};{"Giorni";"Ore";"Minuti";"Secondi";"Centesimi";"Millesimi"})
o il più comodo
=sequences(C1;I3:I8;L3:L8)
.f

fernando cinquegrani

unread,
Nov 12, 2005, 7:19:48 PM11/12/05
to
[fernando cinquegrani] scrive in
http://www.google.it/groups?threadm=OPbsEe%235FH...@TK2MSFTNGP10.phx.gbl

> ora in pippo.xls è indifferente scrivere
> =sequences(C1;{1;24;1440;86400;8640000;86400000};{"Giorni";"Ore";"Minuti";"Secondi";"Centesimi";"Millesimi"})
> o il più comodo
> =sequences(C1;I3:I8;L3:L8)

naturalmente pippo.xls era
http://www.prodomosua.it/zips/propippo.xls
.f


Pippo

unread,
Nov 13, 2005, 3:03:48 PM11/13/05
to
"fernando cinquegrani" <f.cinq...@xroxxmxxxa.it> ha scritto nel
messaggio news:OPbsEe#5FHA...@TK2MSFTNGP10.phx.gbl...
> [Pippo] scrive in
>
http://www.google.it/groups?threadm=%23Bey2%2385FH...@TK2MSFTNGP12.phx.gb
l

> > Quindi, se ho ben capito, per passare come argomento di una
> > "funzione" una "matrice", non ci sono altre alternative?

> [ti rispondo solo perchč maurizio borrelli non
> č nei paraggi :-)]

Ricordo una vostra interessante discussione sul "Nothing".. :-)).. :

http://snipurl.com/junb

[cut]

> Public Function sequences(x As Double, n, l) As String
> Dim y As Long, i As Long, z As String
> Dim nr As Long, mr As Long, nn As Variant, ll As Variant
> If TypeOf n Is Range Then nr = n.Rows.Count Else nr = UBound(n)
> ReDim nn(1 To nr)
> ReDim ll(1 To nr)
> For i = 1 To nr
> If TypeOf n Is Range Then nn(i) = n(i, 1) Else nn(i) = n(i)
> If TypeOf l Is Range Then ll(i) = l(i, 1) Else ll(i) = l(i)
> y = Int(x / (1 / nn(i)))
> x = x - y * (1 / nn(i))
> z = z & y & " " & ll(i) & ", "
> Next
> sequences = Left(z, Len(z) - 2)
> End Function

La seguente dichiarazione:

Dim nr As Long, mr As Long, nn As Variant, ll As Variant

per dare una maggiore leggibilita', si potrebbe scrivere:

Dim nr As Long, mr As Long, nn() As Variant, ll() As Variant

per far capire che "nn" e "ll" sono matrici dinamiche.

Cosa ne pensi???

Ciao e grazie milleeee!!!!
Pippo


fernando cinquegrani

unread,
Nov 13, 2005, 10:37:28 PM11/13/05
to
[Pippo] scrive in
http://www.google.it/groups?threadm=%23Z3wtwI...@TK2MSFTNGP15.phx.gbl

> La seguente dichiarazione:
>
> Dim nr As Long, mr As Long, nn As Variant, ll As Variant
> per dare una maggiore leggibilita', si potrebbe scrivere:
> Dim nr As Long, mr As Long, nn() As Variant, ll() As Variant

dipende dal significato: posso dichiarare un variant o un array di
variant

in realtà la vera dichiarazione è nel redim.
se avessi scritto più correttamente

Public Function sequences(x As Double, n, l) As String
Dim y As Long, i As Long, z As String
Dim nr As Long, mr As Long, nn As Variant, ll As Variant
If TypeOf n Is Range Then nr = n.Rows.Count Else nr = UBound(n)

ReDim nn(1 To nr) As Double
ReDim ll(1 To nr) As String


For i = 1 To nr
If TypeOf n Is Range Then nn(i) = n(i, 1) Else nn(i) = n(i)
If TypeOf l Is Range Then ll(i) = l(i, 1) Else ll(i) = l(i)
y = Int(x / (1 / nn(i)))
x = x - y * (1 / nn(i))
z = z & y & " " & ll(i) & ", "
Next
sequences = Left(z, Len(z) - 2)
End Function

nel foglio:
=sequences(167;{0,01;0,1;1};{"centinaia";"decine";"unità"})

una dichiarazione di matrice dinamica tipo Dim nn() as Variant
avrebbe causato errore nel Redim.
.f


0 new messages