Condividi:        

Creazione Formule

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Creazione Formule

Postdi Gollum999 » 08/01/10 12:19

Gent.mo pc Facile.

non so perchè non mi funzionano queste 2 formule.

1° Formula
Function som1(ciccio, franco)

som1 = (ciccio + franco)

End Function


2° Formula
(perchè mi restituisce l' errore valore?che cosa ho sbagliato in questa riga e nelle altre?:
AdessoTesto = "=TEXT(Adessocom,""gg/mm/aaaa hh.mm.ss"")" : l' obbirttivo di questa riga era trasformare una data in un testo.

Function SerialeB(Adessocom, Oraborsa)
Dim AdessoTesto
Dim SerData
Dim SerOra
Dim AdessoTestoB
Dim SerOraB
Dim SotComBor
AdessoTesto = "=TEXT(Adessocom,""gg/mm/aaaa hh.mm.ss"")"
SerData = "=DATEVALUE(AdessoTesto)"
SerOra = "=TIMEVALUE(AdessoTesto)"
AdessoTestoB = "=TEXT(Oraborsa,""hh.mm.ss"")"
SerOraB = "=TIMEVALUE(AdessoTestoB)"
SotComBor = SerOra - SerOraB
If SotComBor < 0 Then
SerialeB = (SerData - 1) + SerOraB
Else
SerialeB = SerData + SerOraB
End If
End Function

Ringrazio ancora tutti i moderatori del Forum per l' aiuto e auguro a tutti anche se un pò in ritardo uno splendido 2010.
Cordialmente
Gollum999
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Sponsor
 

Re: Creazione Formule

Postdi Anthony47 » 08/01/10 17:33

Per la prima, dovresti dire come la richiami e con che tipo di dati.

La seconda e' un po' piu' complessa, visto che non dici che cosa vorresti fare con quel codice; certo e' anomalo mettere delle stringhe in due variabili (ad esempio SerOra = "=TIMEVALUE(AdessoTesto)" e SerOraB = "=TIMEVALUE(AdessoTestoB)") e poi volerne calcolare la differenza (SotComBor = SerOra - SerOraB).
La cosa piu' semplice e' che spieghi "che cosa" vorresti fare, non solo "come" hai cercato di farlo.

Buon anno anche a te.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 08/01/10 22:27

Gent.mo PC Facile

Oltre all' uso delle macro sono nuovo anche nella creazione di funzioni.
La prima funzione la richiamo cliccando su una cella vuota e inserendo questa funzione tramite il pulsante inserisci funzione.
Questa fuzione l' ho creata solo come esercitazione nella creazione di funzioni.
I dati che voglio immettere nella funzione e quindi negli argomenti (ciccio, franco) sono semplici numeri.è una normale somma.

1° Formula
Function som1(ciccio, franco)

som1 = (ciccio + franco)

End Function

2° formula

l' obbiettivo di: SerOra = "=TIMEVALUE(AdessoTesto)" è di convertire l'ora,i min e i secondi dal formato testo al formato seriale perchè la variabile AdessoTesto è in formato testo.
Vale la stessa cosa per SerOraB = "=TIMEVALUE(AdessoTestoB)")

l' obbiettivo di (SotComBor = SerOra - SerOraB) è appunto avere la differenza dei 2 numeri seriali.

Ho "creato" questa funzione solo perchè in Excell non ho trovato nessuna funzione che convertisse direttamente una data o un orario in numero seriale (sembra che debba passare per forza per il formato testo per la conversione).

Grazie per l' aiuto.

Gollum999
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Flash30005 » 08/01/10 23:47

Ciao Gollum
In vba hai diversi modi per avere l'ora in numero seriale
uno di questi per esempio potrebbe essere
Codice: Seleziona tutto
Sub Adesso()
Range("A1").value = Format(Int(Timer), "00000")
End Sub

(ovvero i secondi trascorsi dalla mezzanotte al momento dell'avvio della macro)

Ma è chiaro che tutto dipende da cosa vorresti ottenere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Creazione Formule

Postdi Anthony47 » 09/01/10 00:33

Anthony47 ha scritto:Per la prima, dovresti dire come la richiami e con che tipo di dati
Per intenderci: un esempio di formula che scrivi in excel, e che risultato ti restituisce?

Gollum999 ha scritto:Ho "creato" questa funzione solo perchè in Excell non ho trovato nessuna funzione che convertisse direttamente una data o un orario in numero seriale (sembra che debba passare per forza per il formato testo per la conversione).
Forse quello che vuoi fare e' molto piu' facile di quanto immaginiamo, visto che in excel una data e un orario sono gia' rappresentati come numeri seriali; ma non ho ancora capito in che cosa consiste questa conversione. Puoi farlo con un esempio? Quale dato hai in partenza, quale dato vuoi ottenere? Non e', per caso, che non conosci la funzione Orario(hh;mm;ss)?

Lo sviluppo di "funzioni utente" e' una possibilita' molto interessante di excel, spesso consente grosse semplificazioni alla struttura del foglio; una Funzione pero' ha piu' vincoli di una macro, ad esempio la gestione degli errori e' drasticamente diversa, cosi' mentre in una macro una sottrazione di grandezze "stringhe" ti porta il messaggio di errore "Tipo non corrispondente", in una funzione questo viene trasformato in un errore reso dalla funzione nella cella excel, del tipo (per questa tipologia di anomalia) #VALORE. Non voglio dire che e' troppo difficile, ma che ha senso ricorrere alla Funzione utente quando le funzioni di excel sono insufficienti; e se questo e' il tuo caso non lo so ancora.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 09/01/10 14:55

Gent.mo pc facile.

Per Flash

Una macro non è l'ideale per quello che voglio fare mi servirebbe una funzione.
Ho bisogno di una funzione che dati la data e l' ora mi dia il numero seriale es il numero seriale di: 10/11/09 10.40.12
Ne ho bisogno anche di un' altra che dati solo l' ora, i min e i sec mi dia il numero seriale es di 09.13.15
e un ' altra che data la data mi restituisca il numero seriale es di 15/11/09
La macro che mi hai scritto è interessante ma non è adatta anche per un' altro motivo: devo fare anche la somma tra una data seriale e un' ora (considerando l' ora come un' intero risulterebbe incompatibile la somma con la data seriale).
Ho bisogno di un risultato che rappresenti la data come un intero e l'ora,i min e i sec come un numero inferiore ad 1.
es: 4102,768

Per Anthony

La prima funzione è una somma normale: in una cella ci metto 1, in un' altra cella ci metto 2, clicco in un' altra cella e spingo il pulsante inserisci funzione, poi scelgo definite dall' utente e poi il nome della funzione: som1 ; si apre la finestra argomenti funzione e nell' argomento Ciccio clicco nella prima cella dove avevo immesso 1; mi sposto poi sull' altro argomento Franco e clicco sulla seconda cella dove avevo inserito 2 e poi clicco su ok. Il risultato che voglio che mi restituisca è naturalmente 3.

La seconda funzione.
Ho guardato la funzione orario però devo dargli separatamente il valore dell' ora,min e sec e questo sarebbe il minimo.
Il problema che mi restituisce "lo stesso valore" sotto forma di orario pm o am.
Il mio obbiettivo è avere gli orari seriali e le date seriali per poi poterle sommare, sottrarre tra di loro ed elaborarle.
Es data una data 10/09/09 trovare il numero seriale
Es Dato un orario 11.23.06 trovare il numero seriale
Es data una data a un orario 10/09/09 11.23.06 trovare il numero seriale
Es data una data a un orario 10/09/09 11.23.06 trovare il numero seriale solo della data

Nello specifico ho una data e il suo orario tramite la funzione adesso(la funzione adesso poi non verrà piu aggiornata) e un' altro orario che chiamerò orarioB.
Devo sottrarre solo i due orari; se l' orarioB è maggiore dell' altro voglio che sia sottratto 1 giorno alla data se invece l' orario B è inferiore mi sta bene la data così come è.
il passo finale è sommare l' orarioB con la data appena trovata nel passaggio precedente.

Ringrazio tanto Flash ed Anthony per la loro disponibilità ed il loro aiuto!

Cordialmente.

Gollum999
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Anthony47 » 09/01/10 16:42

Seguendo il tuo messaggio:
Ho bisogno di una funzione che dati la data e l' ora mi dia il numero seriale es il numero seriale di: 10/11/09 10.40.12
Se in una cella scrivi data e ora il dato viene gia' registrato da excel come numero seriale, pronto per essere elaborato da excel. Se invece per "data" intendi anno, mese e giorno (come valori separati), allora userai la funzione Data(Anno;Mese;Giorno); idem se per ora intendi ora, minuti, secondi (come valori separati), allora userai Orario(Ora;Minuti;Secondi); e se vuoi data+orario fai una unica formula =Data(Anno;Mese;Giorno)+ Orario(Ora;Minuti;Secondi).

Ne ho bisogno anche di un' altra che dati solo l' ora, i min e i sec mi dia il numero seriale es di 09.13.15
e un ' altra che data la data mi restituisca il numero seriale es di 15/11/09
Vedi quanto detto sopra.

Ho bisogno di un risultato che rappresenti la data come un intero e l'ora,i min e i sec come un numero inferiore ad 1. es: 4102,768
Questo e' quello che fa excel, non hai bisogno di nient' altro per ottenere cio'; guarda l' help on line alla voce " Informazioni sulle date e i sistemi di data"

Sulla prima funzione; quindi la chiami con una formula tipo =Som1(A1;A2) .Con i numeri descritti il risultato a me viene 3; a te invece?

La prima parte relativa alla descrizione della seconda funzione non la capisco; come ti ho detto excel gia' rappresenta date e orari come numeri seriali, voler rifare cose gia' fatte da excel sono per me richieste incomprensibili.
La seconda parte la comprendo con difficolta', perche' excel gia' consente di sommare e sottrarre dati e orari, lo sviluppo di una funzione aggiuntiva mi pare superflua.

Ragioniamo piu' in dettaglio su queste informazioni.

Nello specifico ho una data e il suo orario tramite la funzione adesso(la funzione adesso poi non verrà piu aggiornata) e un' altro orario che chiamerò orarioB.
Devo sottrarre solo i due orari; se l' orarioB è maggiore dell' altro voglio che sia sottratto 1 giorno alla data se invece l' orario B è inferiore mi sta bene la data così come è.
il passo finale è sommare l' orarioB con la data appena trovata nel passaggio precedente.
Quindi hai due celle, una con data+orario (cella 1) e una con solo un orario (cella 2; fascia 0:00-23:59:59, vero?)
Domanda: vuoi calcolare Cella1 - Cella2 oppure Cella2 - Cella1? Personalmente propenderei per la seconda, ma vorrei che gli obiettivi li chiarisse chi fa la domanda.

Devo sottrarre solo i due orari; se l' orarioB è maggiore dell' altro voglio che sia sottratto 1 giorno alla data se invece l' orario B è inferiore mi sta bene la data così come è.
Questo discorso e' tutto relativo al calcolo della differenza di orario, oppure parli di un altro calcolo?
Se e' sempre relativo al calcolo della differenza oraria, che centra questo ragionamento sulla data? Vuoi per caso dire che se faccio 2:00 (orario di fine) - 22:00 (orario di inizio) devo calcolare 4h00m e non un valore negativo?

il passo finale è sommare l' orarioB con la data appena trovata nel passaggio precedente.
Questo e' un terzo risultato che vuoi calcolare o fa sempre parte della logica che hai cercato di spiegarmi?

Il tutto per concludere che evidentemente non abbiamo ancora capito che cosa ti ambascia, e ripeto il suggerimento di farlo con un esempio: Quale dato hai in partenza, quale dato vuoi ottenere?

Ad esempio:
cella A1 contiene ....
Cella A2 contiene ....
Cella . . etc . . . etc

Vorrei calcolare:
in cella XXnn ....., che con i dati esposti corrisponde al valore . . . .
in cella YYYmmm . . . .
in cella . . . etc etc

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 10/01/10 15:40

Gent.mo P.C. facile e gent.mo Anthony.

La formula numero 1 non mi funziona: mi da come "risultato" RIF! al posto di 3

Function som1(ciccio, franco)

som1 = (ciccio + franco)

End Function

Per quanto riguarda la formula numero 2 grazie ai tuoi insegnamenti l' ho modificata.
Forse si riesce anche a semplificarla di piu.
Comunque l' ho riscritta così:

Cella A59 contiene : 10/01/2010 14.29
Cella B59 contiene: 15.00

Cella B60 contiene la sottrazione tra A59 e B59: 09/01/2010 23.29
Cella B61 Contiene la data di B60 in formato testo tramite la funzione =TESTO(B60;"gg/mm/aaaa") e cioè 09/01/2010
Cella B62 Contiene la data di B61 ma in formato Data tramite la funzione: =DATA(STRINGA.ESTRAI(B61;7;4);STRINGA.ESTRAI(B61;4;2);STRINGA.ESTRAI(B61;1;2)) e cioè 09/01/2010
Cella B63 Contiene la somma di B62 con B59: 09/01/2010 15.00

L' obbiettivo di tutte queste operazioni è ottenere il risultato di B63.
Mi piacerebbe creare una funzione che una volta immessi i dati di A59 e B59 mi calcoli subito il risultato nella cella B63 senza dovere usare altre celle es B60;B61;B62.

Ti ringrazio ancora per la tua disponibilità e la tua competenza Anthony!
Saluti.
Gollum999
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Flash30005 » 10/01/10 18:31

Tu qui parli di Adesso e nelle formule "Adesso" significa In questo momento "data ora:minuti:secondi"
Gollum999 ha scritto:...
Function SerialeB(Adessocom, Oraborsa)
Dim AdessoTesto
Dim SerData
Dim SerOra
Dim AdessoTestoB
Dim SerOraB
Dim SotComBor
AdessoTesto = "=TEXT(Adessocom,""gg/mm/aaaa hh.mm.ss"")"
SerData = "=DATEVALUE(AdessoTesto)"
SerOra = "=TIMEVALUE(AdessoTesto)"
AdessoTestoB = "=TEXT(Oraborsa,""hh.mm.ss"")"
SerOraB = "=TIMEVALUE(AdessoTestoB)"
SotComBor = SerOra - SerOraB
If SotComBor < 0 Then
SerialeB = (SerData - 1) + SerOraB
Else
SerialeB = SerData + SerOraB
End If

e qui parli di una data trascorsa :undecided:
Gollum999 ha scritto:Ho bisogno di una funzione che dati la data e l' ora mi dia il numero seriale es il numero seriale di: 10/11/09 10.40.12


Senza un foglio dati come hai tu i dati iniziali e di come vorresti ottenerli non mi è facile realizzare ciò che desideri e... rimango in attesa.

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Creazione Formule

Postdi Anthony47 » 10/01/10 18:54

Per Gollum: Maremma z#@z§#^$...
Forse e' troppo complicata la domanda "Quale dato hai in partenza, quale dato vuoi ottenere?"
Perche' non dici LA LOGICA del calcolo che vuoi eseguire, invece che COME STAI CERCANDO DI FARLO?
Per caso stai cercando di avere un risultato che combini la data di A59 e l' ora di B59? Perche' se e' cosi' allora usi
Codice: Seleziona tutto
=INT(A59-B59)+B59


Ma e' l' ultima ipotesi che faccio arrovellandomi sulle cose che scrivi, poi aspetto la risposta alla complessa domanda che ho posto piu' volte.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 10/01/10 23:39

Gent.mo Pc-Facile
Gentilissimi Anthony e Flash.

La formula =INT(A59-B59)+B59 è perfetta!
Come hai intuito volevo proprio la combinazione della cella Data A59 con L' Ora B59.
Scusate se sono stato goffo nell' esprimermi!
Ma voi siete Grandi!

P.S. Perchè la prima formula non funziona?e mi da RIF?!

Function som1(ciccio, franco)

som1 = (ciccio + franco)

End Function
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Anthony47 » 11/01/10 00:57

Per som1, vediamo di capirci:
se scrivi la formula =SOM1(2;3) che cosa ti restituisce?

Cosa leggi (nella barra della formula) se selezioni una delle tue formule che ti restituiscono #RIF?

Per la storia della data, e' un difetto abbastanza comune perdere di vista l' obiettivo e incaponirsi a descrivere i viottoli che non lo raggiungono.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 11/01/10 13:13

Gent.mo Pc-Facile
Gentilissimo Anthony.

Quando scrivo in una cella la formula =som1(2;3) nella stessa cella mi viene restituito: #RIF! e nella barra della formula c'è scitto: =SOM1(2;3)

Grazie ancora.

Gollum999
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Anthony47 » 11/01/10 14:50

Humm...
Se togli il codice da dove l' hai messo e lo metti su un "Modulo" a se' stante (solo con le 3 righe della Som1) cambia qualcosa?
Per inserire un nuovo "Modulo": dall' editor vba, Menu /Inserisci /Modulo.

Dimmi anche come si chiama il nuovo "modulo" (lo leggi nella riga di intestazione, in genere colorata in blu).

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 11/01/10 19:22

Gent.mo P.C. Facile.
Gent.mo Anthony.

Ho creato un nuovo modulo di nome Modulo2.
Ho copiato la funzione dal Modulo1 cioè quello precedente.
Ho eliminato la funzione dal Modulo1 e ho testato la funzione ma il risultato non cambia: mi da sempre #RIF!
Ho anche provato a scriverla così =som1(2;3) ma il risultato non cambia!

Saluti.

Gollum999
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Anthony47 » 11/01/10 23:54

Mah... non mi viene nessuna illuminazione sul perche' non ti funzioni; prova a scaricare il file allegato e poi prova a inserire in una cella libera esattamente la formula =somm1(3;4) e dimmi il risultato.
http://rapidshare.de/files/48982175/provasom1.xls.html
Fai anche F2 /Enter sulle formule in B5 e B6 e confermami che il risultato rimane 5 e 55.

In un' altra cella libera scrivi esattamente =SOMMA(2;3) e dimmi che cosa ti restituisce.

Se il risultato non e' soddisfacente prova a sostituire il codice con questo e ripeti le prove:
Codice: Seleziona tutto
Function somm1(ByVal ciccio, ByVal franco)
somm1 = (ciccio + franco)
End Function


Ho anche provato a scriverla così =som1(2;3) ma il risultato non cambia!
Questa e' la formula che ti avevo fatto provare 24 h fa; cosa c' e' di diverso?

Ciao.

NB: SOMM1 non SOM1
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione Formule

Postdi Gollum999 » 12/01/10 16:14

Gent.mo P.C. Facile.
Gent.mo Anthony.

Ho scaricato il file allegato e poi ho inserito in una cella libera la formula: =somm1(3;4) e il risultato è giusto: 7
Ho anche fatto enter sulle celle B5 e B6 e il risultato rimane rispettivamente 5 e 55.
in un' altra cella clibera ho scritto =Somma(2;3) e il risultato è stato 5.
Poi mi è venuta l' intuizione!
Ho visto che l' unica differenza tra la tua formula somm1 e la mia som1 è il numero di caratteri così sono tornato nel mio file e ho modificato la mia funzione tramite il vba e ho scritto:

Function somm2(ciccio, franco)

somm2 = (ciccio + franco)

End Function

l' ho provata e Funziona!

Grazie ancora per l' aiuto Anthony.

Gollum999.
Gollum999
Utente Junior
 
Post: 24
Iscritto il: 24/10/09 13:08

Re: Creazione Formule

Postdi Anthony47 » 12/01/10 16:32

Purtroppo la lunghezza del nome non fa differenza (ho usato somm1 perche' som1 era sempre presente nel mio codice).

Vedremo che succede la prossima volta...

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Creazione Formule":

creazione video
Autore: themisterx
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 73 ospiti