Pablo
C1: =SE(A1=1;=B1*3%;0)
oppure
C1: =(A1=1)*(B1*3%)
--
Tiziano Marmiroli
Microsoft MVP - Office
Pablo
Visto che l'oggetto di questo 3D è funzioni logiche:
=SE(A1-1;;B1*0,03)
Mi pare doveroso mettere due righe di spiegazione di questa formula:
Non vi è un criterio di confronto, come di solito si mette! del tipo:
=SE(A1=1....ecc.ecc)
A1-1 restituisce ZERO nel caso che A1=1;
la funzione =SE(0;vero;falso) restituisce FALSO
quindi ho utilizzato un ragionamento invertito rispetto alla norma:
Se l'epressione A1-1 è VERO (quindi A1<>1) mette ZERO altrimenti se A1-1 è
FALSO ( A1=1) metti B1*0,03
Tutto questo non per complicare la vita, tanto più che ci sono altre formule
già scritte che puoi utlizzare, ma per sfruttare appieno le risorse di
excel.
ivano
Ivano,
interessante ampliamento del SE logico...
A1- 1 è da considerarsi quindi VERO se A1<>1, cioè qualsiasi valore della
differenza, diverso da 0 ..... questo per me è nuovo perchè pensavo che il
VERO dovesse corrispondere solo a 1
(ma in questo caso mi pare si intenda, come dire, che "esista" una
differenza, cioè essa non sia nulla).
nella formula =SE(A1-1;;B1*0,03) , per restare nella logica del
SE...ALLORA.... , A1-1 deve supporsi VERO (A1<>1, e cioè la differenza deve
appunto "esistere").
tutto buono a sapersi!
grazie
ciaooo
giovanna
ah, il ;; significa metti 0 (a beneficio di chi non dovesse sapere .... io
l'ho appreso da poco!)
Ciao, Giovanna
Ivano dopo le 20,00 č indisponibile.
> SE...ALLORA.... , A1-1 deve supporsi VERO (A1<>1, e cioč la differenza
deve
> appunto "esistere").
Hai centrato in pieno il concetto!!! mi fai.......paura!!!
comunque, č piů intuibile con =SE(A1;1;2)
se a1 č vuoto (ovvero zero) ti restituisce 2
enzo
Inviterei a sperimentare piu' a fondo... Per esempio:
=SE(A1;)
=SE(A1;;)
=SE(A1;VERO)
=SE(A1;VERO;)
=SE(A1;VERO;FALSO)
=SE(A1=VERO;)
=SE(A1=VERO;;)
=SE(A1=VERO;VERO)
=SE(A1=VERO;VERO;)
=SE(A1=VERO;VERO;FALSO)
assegnando ad A1 i valori seguenti:
<cella vuota>
0
<un valore numerico qualsiasi diverso da zero>
<un carattere o una stringa di testo qualsiasi>
VERO
FALSO
Magari rendendo piu' leggibile il tutto mediante l'uso della funzione
utente:
Public Function GetFormula( _
ByVal rng As Excel.Range)
Application.Volatile True
GetFormula = rng.FormulaLocal
End Function
--
Ciao :o)
Maurizio Borrelli, Microsoft MVP - Office Systems - Access
--------
?SPQR(C)
X
--------
Dimenticavo. Testare anche assegnando ad A1 espressioni che ge'nerino
valori di errore. Per esempio:
=1/0
=10^309
=NON.DISP()
#NULLO!
...
Ciao, Giovanna.
Hai presente cosa succede quando fai:
Inserisci > Funzione...
Oppure selezionare una categoria: Definite dall'utente
? Se non vi sono funzioni definite dall'utente nella lista sotto
l'etichetta:
Selezionare una funzione:
non compare ovviamente nessuna funzione. Ed altrettanto ovviamente se fra le
eventuali funzioni utente definite non ne e' presente una di nome
"GetFormula", o con altro nome ma identico scopo, l'utente, tu, io, noi...
dovremo provvedere a dota'rcene.
Vediamo quindi come creare una "funzione definita dall'utente". Anche se
l'argomento e' stato piu' volte trattato, una volta in piu' non dovrebbe far
male.
Innanzi tutto vediamo quale sia lo scopo di quella funzione che ho
chiamato "GetFormula":
data una cella, ottenerne l'eventuale formula in formato
"locale" (nel nostro caso: "italiano")
Per esempio, se la formula nella cella B1 fosse:
=SE(A1=VERO;VERO)
noi in B1 vedremmo il valore ovvero il risultato di tale formula. Nei casi
prospettati nei miei post di questo thread e' evidente che ci farebbe comodo
avere sott'occhio sia il valore che la formula, in modo da vedere:
| A | B | C |
--+---+-------+--------------------+
1 | | FALSO | =SE(A1=VERO;VERO) |
2 | | 0 | =SE(A1=VERO;VERO;) |
dove le formule sarebbero:
B1: =SE(A1=VERO;VERO)
C1: =GetFormula(B1)
B2: =SE(A1=VERO;VERO;)
C2: =GetFormula(B2)
Il posto "giusto" per scrivere una funzione utente e' la Cartella di
lavoro "PERSONAL.XLS" in quanto tale cartella viene aperta nascosta
all'apertura di Excel, e tutte le sue funzioni utente sono cosi' disponibili
per tutte le Cartelle di lavoro.
Per verificare se giŕ abbiamo aperto la Cartella di lavoro
"PERSONAL.XLS":
Finestra > Scopri...
e se la voce "Scopri..." non e' disponibile vuol dire che non ci sono
Cartelle di lavoro nascoste e quindi tanto meno esiste la cartella
"PERSONAL.XLS".
Nel caso in cui "PERSONAL.XLS" non esiste:
Strumenti > Macro > Registra nuova macro...
Nome macro: GetFormula
Memorizza macro in: Cartella macro personale
Descrizione: Data una cella ne ricava la formula.
[ OK ]
Strumenti > Macro > Interrompi registrazione
Strumenti > Macro > Visual Basic Editor
Visualizza > Gestione progetti
individuare nella finestra "Progetto" il progetto:
VBAProject (PERSONAL.XLS)
e mediante il pulsante:
Espandi/comprimi cartelle
eventualmente premuto e ripremuto dovrebbe essere possibile individuare il
modulo:
Modulo1
Lo selezioniamo quindi:
Visualizza > Codice
dovremmo vedere al suo interno:
Sub GetFormula()
'
' GetFormula Macro
' Data una cella ne ricava la formula.
'
'
End Sub
che modificheremo come segue:
Public Function GetFormula(ByVal rng As Excel.Range)
'
' GetFormula Macro
' Data una cella ne ricava la formula.
'
'
Application.Volatile True
GetFormula = rng.FormulaLocal
End Function
concludendo con:
Debug > Compila VBAProject
File > Salva PERSONAL.XLS
File > Chiudi e torna a Microsoft Excel
Ora dovremmo essere in grado di usare la nuova funzione utente
"GetFormula":
<selezioniamo la cella C1>
Inserisci > Funzione...
Oppure selezionare una categoria: Definite dall'utente
Selezionare una funzione: PERSONAL.XLS!GetFormula
[ OK ]
Rng: B1
[ OK ]
> <selezioniamo la cella C1>
> Inserisci > Funzione...
> Oppure selezionare una categoria: Definite dall'utente
> Selezionare una funzione: PERSONAL.XLS!GetFormula
> [ OK ]
> Rng: B1
> [ OK ]
fantastico seguire le istruzioni in questo modo sei un'ottimo
insegnante.
Bruno
--
La cultura è il perseguimento della perfezione totale, attraverso la
conoscenza di quanto di meglio si è detto e pensato nel mondo su tutte
le questioni che più ci interessano." Matthew Arnold (1822-1888),
filosofo e poeta inglese. Grazie e Ciao a Tutti da Bruno
Ciao, Bruno.
Grazie. :-)
Approfitto per fare una correzione e integrazione. La frase:
Nel caso in cui "PERSONAL.XLS" non esiste:
va letta:
Sia che "PERSONAL.XLS" non esista --in tal caso con le operazioni
seguenti ne otterremo la creazione e, al salvataggio, la scrittura nella
cartella (directory) di avvio XLSTART--, sia che esista:
>
> >
>
...................>
>
>
Maurizio, splendida spiegazione!
mi č venuto tutto per bene...
qui:
Public Function GetFormula(ByVal rng As Excel.Range)
> '
> ' GetFormula Macro
> ' Data una cella ne ricava la formula.
> '
>
> '
> Application.Volatile True
> GetFormula = rng.FormulaLocal
> End Function
non avevo dato importanza agli apici ' e non li mettevo per cui Debug mi
segnalava errori.... poi, risolto.
grazie Maurizio per la grande disponibilitą
č un piacere scoprire cose nuove.
(ora puņ darsi che indaghi un po' sulle funzioni definite
dall'utente. In elenco ne trovo ... Devo ancora sperimentare le tue
formule, poi ti dirņ)
ciaoo
ancora grazie
giovanna
> =SE(A1;)
> =SE(A1;;)
scritte cosě, senza aggiungere altro evento desiderato, non basta che A1
sia un valore numerico, esse restituiscono FALSO oppure 0 sempre, anche a
cella vuota. (fatta eccezione per testo o val errore)
Se si aggiunge altro evento, basta che il valore sia diverso da 0 o da
vuoto.
queste invece:
> =SE(A1;VERO)
> =SE(A1;VERO;)
> =SE(A1;VERO;FALSO)
restituiscono VERO se in A1 vi č un valore numerico diverso da 0 o da vuoto
oppure VERO
in queste per avere VERO:
> =SE(A1=VERO;)
> =SE(A1=VERO;;)
> =SE(A1=VERO;VERO)
> =SE(A1=VERO;VERO;)
> =SE(A1=VERO;VERO;FALSO)
con qualche differenza, A1 deve proprio essere = a "vero". Mi sembrano le
piů "classiche" del SE logico....
eccc....
ah, utile la funzione utente!
grazie
ciao ciao
giovanna
Ciao, Giovanna.
Onde evitare confusione, e' opportuno parlare di "argomenti", piuttosto
che di "eventi", i quali pure esistono, e con un loro preciso significato.
In effetti la formula:
=SE(A1;)
come pure altre simili, non ha molto senso se non quello di mostrare una
formula corretta dal punto di vista sintattico, quindi lecita, ma totalmente
inutile tranne per il fatto che permette di allenarsi a cogliere, dagli
effetti, eventuali errori logici di scrittura.
> > "Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel
> messaggio
> > news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...
> =SE(A1;)
> > > =SE(A1;;)
> > scritte così, senza aggiungere altro evento desiderato, non basta che
A1
> > sia un valore numerico, esse restituiscono FALSO oppure 0 sempre, anche
a
> > cella vuota. (fatta eccezione per testo o val errore)
> > Se si aggiunge altro evento, basta che il valore sia diverso da 0 o da
> > vuoto.
> >
>> Ciao, Giovanna.
>
> Onde evitare confusione, e' opportuno parlare di "argomenti",
piuttosto
> che di "eventi", i quali pure esistono, e con un loro preciso significato.
>
sì Maurizio. sbagliata terminologia! ma l'argomento sarebbe stato "ciò che
voglio si verifichi". volevo dire questo.
> In effetti la formula:
>
> =SE(A1;)
>
> come pure altre simili, non ha molto senso se non quello di mostrare una
> formula corretta dal punto di vista sintattico, quindi lecita, ma
totalmente
> inutile tranne per il fatto che permette di allenarsi a cogliere, dagli
> effetti, eventuali errori logici di scrittura.
già, infatti mi chiedevo: e l'uso?? Mi hai risposto
ciaoo grazie
giovanna