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

funzioni logiche

98 views
Skip to first unread message

Pablo

unread,
Jul 28, 2004, 9:37:02 AM7/28/04
to
Ciao a tutti.
Nella colonna A inserisco un numero per ogni cella.
Se il numero è = ad 1 allora è vero, tutti gli altri sono
falsi.
Nella colonna B per ogni cella ho un valore numerico.
Mi piacerebbe che nella colonna C mi fosse calcolata una
percentuale, per ogni cella adiacente, pari ad esempio al
3%, solo quando nella colonna A viene inserito il numero
1 che è il valore vero.
Potreste aiutarmi? E scusate se non sono stato chiaro.
Grazie anticipatamente.

Pablo

Tiziano Marmiroli

unread,
Jul 28, 2004, 9:46:06 AM7/28/04
to

C1: =SE(A1=1;=B1*3%;0)

oppure

C1: =(A1=1)*(B1*3%)

--
Tiziano Marmiroli
Microsoft MVP - Office

Pablo

unread,
Jul 28, 2004, 10:36:31 AM7/28/04
to

>-----Messaggio originale---
>.
>
Grazie, mi hai tolto da un mare di guai.
Funziona a meraviglia, grazie ancora.

ivano

unread,
Jul 28, 2004, 10:46:03 AM7/28/04
to

"Pablo" <paolob...@duep.net> ha scritto nel messaggio
news:5b8d01c474a7$f6dcea50$a401...@phx.gbl...

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


Giovanna

unread,
Jul 30, 2004, 1:49:37 PM7/30/04
to
"ivano" <i_chia...@NOSvirgilio.it> ha scritto nel messaggio
news:%236%23A4HLd...@TK2MSFTNGP09.phx.gbl...

>
>
> 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!)


Enzo Samarelli

unread,
Jul 30, 2004, 6:29:39 PM7/30/04
to

"Giovanna" <g_ar...@asiatin.it> ha scritto nel messaggio
news:eGVCM4ld...@TK2MSFTNGP10.phx.gbl...

> "ivano" <i_chia...@NOSvirgilio.it> ha scritto nel messaggio
> news:%236%23A4HLd...@TK2MSFTNGP09.phx.gbl...

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


Giovanna

unread,
Jul 30, 2004, 6:58:09 PM7/30/04
to

"Enzo Samarelli" <enzo.sa...@tin.it> ha scritto nel messaggio
news:%23iYw8So...@tk2msftngp13.phx.gbl...
..bello anche questo!
grazie Enzo.....
ciaoo
giovanna


Maurizio Borrelli

unread,
Aug 2, 2004, 3:59:06 AM8/2/04
to
Ciao, Tutti.

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
--------


Maurizio Borrelli

unread,
Aug 2, 2004, 4:25:38 AM8/2/04
to
"Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel messaggio
news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...
[...]

> 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

Dimenticavo. Testare anche assegnando ad A1 espressioni che ge'nerino
valori di errore. Per esempio:

=1/0

=10^309

=NON.DISP()

#NULLO!

...

Giovanna

unread,
Aug 2, 2004, 6:12:15 AM8/2/04
to
"Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel messaggio
news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...
grazie Maurizio
sperimenterň subito...
ma dimmi per favore: mai usato funzione utente. Bisogna inserirla in
"visualizza codice" cliccando sulla etichetta del foglio di lavoro? cioč,
sul nome?
mi scuso se ipotizzo una stupidaggine!
ciaoo
giovanna


Maurizio Borrelli

unread,
Aug 2, 2004, 7:52:55 AM8/2/04
to
"Giovanna" <g_ar...@asiatin.it> ha scritto nel messaggio
news:O6fDKnHe...@TK2MSFTNGP12.phx.gbl...

> "Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel
messaggio
> news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...
[...]

> > 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
[...]

> mai usato funzione utente. Bisogna inserirla in
> "visualizza codice" cliccando sulla etichetta del foglio di lavoro? cioč,
> sul nome?

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 ]

Bruno

unread,
Aug 2, 2004, 9:22:07 AM8/2/04
to
Dopo dura riflessione, Maurizio Borrelli ha scritto :

> "Giovanna" <g_ar...@asiatin.it> ha scritto nel messaggio
> news:O6fDKnHe...@TK2MSFTNGP12.phx.gbl...
>> "Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel messaggio
>> news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl... [...]
>>> 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
> [...]

> <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

Maurizio Borrelli

unread,
Aug 2, 2004, 11:22:56 AM8/2/04
to
"Bruno" <daewootTOG...@email.it> ha scritto nel messaggio
news:mn.13997d48d...@email.it...

> Dopo dura riflessione, Maurizio Borrelli ha scritto :
> > "Giovanna" <g_ar...@asiatin.it> ha scritto nel messaggio
> > news:O6fDKnHe...@TK2MSFTNGP12.phx.gbl...
> >> "Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel
messaggio
> >> news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...
[...]
> fantastico
[...]

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:

Giovanna

unread,
Aug 2, 2004, 3:19:13 PM8/2/04
to
"Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel messaggio
news:ezBhhaIe...@TK2MSFTNGP12.phx.gbl...

>> >
> Vediamo quindi come creare una "funzione definita dall'utente".

>
> >
>
...................>
>
>
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


Giovanna

unread,
Aug 3, 2004, 4:00:04 PM8/3/04
to
"Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel messaggio
news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...

> Ciao, Tutti.
>
> Inviterei a sperimentare piu' a fondo... Per esempio:
>
Maurizio,
notate differenze:
in queste:

> =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

Maurizio Borrelli

unread,
Aug 3, 2004, 5:16:05 PM8/3/04
to
"Giovanna" <g_ar...@asiatin.it> ha scritto nel messaggio
news:O4aEpTZe...@TK2MSFTNGP09.phx.gbl...

> "Maurizio Borrelli" <maurizio...@freepass.it> ha scritto nel
messaggio
> news:ugLqzXGe...@TK2MSFTNGP11.phx.gbl...
> > Inviterei a sperimentare piu' a fondo... Per esempio:
> >
> notate differenze:
> in queste:
> > =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:
[...]

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.

Giovanna

unread,
Aug 3, 2004, 5:31:43 PM8/3/04
to

> > "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


0 new messages