Utilizzo della Funzione condizionale =SE .      (14/02/03) e (17/02/08)

Quando vogliamo ottenere un risultato in una cella SE in un altra cella ci sarà un determinato valore, stiamo utilizzando il costrutto tipico di una "condizione". Excel dispone di una Funzione specifica che ci consente di sfruttare fino a 7 condizioni diverse, "annidate" nell'istruzione (formula) stessa. Le condizioni possono riferirsi non solo al variare di un valore in una cella, ma anche al variare di celle. Vediamo subito due brevi esempi:

  • in A1 : vogliamo che SE il valore messo in B1 è un numero compreso tra 1 e 500, il valore che è in B1 venga moltiplicato per 20%, SE maggiore di 500 detto valore (B1) venga moltiplicato per 30%. Supponendo che in B1 ci sia 300, in A1 (dove risiede la formula) avremo 60.

  • in A1 : vogliamo che SE avremo un valore in B1, venga moltiplicato questo valore per 50, SE invece il valore sarà nella cella C1, sia questo valore ad essere moltiplicato per 60. (Ovviamente non dovranno esserci contemporaneamente due valori in entrambe le celle B1 e C1, altrimenti verrà gestito solo il primo "argomento" (quello relativo a B1)).

Ma vediamo la Sintassi:       SE(test; se_vero; se_falso)  , dove :

  • Test  è un valore o un'espressione qualsiasi che può dare come risultato VERO o FALSO. Tradotto in "pellegrinese" corrisponde al valore nella cella di cui dobbiamo valutare le condizioni (nel primo esempio la B1).

  • Se_vero   è il valore che viene restituito se test è VERO. Sempre in "pellegrinese" corrisponde alla condizione che vogliamo valutare, cioè se B1 (test) corrisponde ad un numero compreso tra 1 e 500, in caso positivo in A1 avremo la moltiplicazione del valore che sta in B1 per 20%.

  • Se_falso   è il valore che viene restituito se test è FALSO. Ancora in "pellegrinese" vuol dire che se il valore in B1 sarà diverso da un numero compreso tra 1 e 500, avremo una condizione negativa, e dovremo fornire comunque un risultato, per esempio zero (0) oppure vorremo A1 vuota (""), o ancora una parola che ci avvisi, tipo "valore errato". Ricordo che per indicare il vuoto si usano due doppi apici e per inserire una parola (testo) la stessa va messa tra doppi apici.

La Funzione SE opera SOLO con queste due condizioni: vuole sempre che venga indicato cosa fare se la prima condizione (Se_vero) NON si verifica, e bisogna specificare (Se_falso) cosa fare. Per cui la formula compilata e posta in A1, su questo esempio sarà:

=SE(B1<=500;B1*20%;"")   - i punti e virgola funzionano da delimitatori di istruzione (argomenti dell'istruzione). la formula dice: se il valore che è in B1 è uguale o minore di 500 ; allora mi moltiplichi questo valore per 20% ; altrimenti mi lasci la cella (A1) vuota.

Come anticipato ad inizio pagina possiamo anche avere diverse condizioni da valutare, non una sola, in questo caso dovremo "annidare" tante istruzioni SE quante sono le condizioni da verificare MA, con un limite: non se ne possono usare più di sette. Come si "annidano" più istruzioni? Inserendo tanti SE con relativa condizione da verificare (Se_vero) messi in sequenza uno dopo l'altro, e SOLO alla fine inserire l'istruzione da seguire (Se_falso) nel caso non si verifichi nessuna delle condizioni previste. Vediamo un esempio con 6 condizioni (basta contare i SE):

=SE(C1=100;C1*20%;SE(C1=150;C1*30%;SE(C1=200;C1*40%;SE(C1=300;C1*50%;

SE(C1=400;C1*60%;SE(C1=500;C1*70%;""))))))

Questa sopra è tutta un'istruzione, e rientra tutta in una cella anche se qui la vediamo su più righe. Da notare che la funzione richiede che vengano usate per lo stesso numero di parentesi aperte " ( " altrettante parentesi chiuse " ) " da mettere in chiusura istruzione.

Nell'esempio sopra le condizioni da verificare si riferiscono a valori definiti, infatti viene richiesto : C1 è uguale a 100, oppure a 150 ecc.ecc, se invece dovessimo usare come condizione da verificare, non un numero definito, ma un range di valori (variabili) compresi tra  un dato numero ed un altro, e quindi aumentare il numero delle condizioni da verificare, avremmo dovuto inserire nelle istruzioni SE, un qualcosa che dicesse ad Excel che le condizioni da verificare sono da ricercare tra un valore ed un altro. Per ottenere ciò, possiamo sfruttare anche la Funzione E , che consente di usare fino a 30 parametri e che può essere inserita in questo modo:

=SE(C1<=100;C1*20%;SE(E(C1>100;C1<201);C1*30%;SE(E(C1>200;C1<301);
C1*40%;SE(E(C1>300;C1<401);C1*50%;SE(E(C1>400;C1<501);C1*60%;
SE(E(C1>500;C1<601);C1*70%;""))))))

Praticamente l'istruzione sopra si legge così: se C1 è uguale o minore di 100, moltiplichi il valore di C1 per 20% ; oppure se C1 è superiore a 100 e C1 è inferiore a 201,moltiplichi il valore di C1 per 30% ; oppure ecc.ecc., e alla fine (con i doppi apici) : altrimenti mi lasci la cella A1 vuota.

Possiamo definire ulteriori condizioni, lavorando sugli argomenti (fino a 30) sfruttabili dalla funzione E, per esempio: possiamo decidere che la condizione prevista nella seconda istruzione (numero compreso tra 100 e 201) si applichi soltanto se in un altra casella (la D1 ad esempio) compare un nome, e allora la nostra formula diventerebbe così (riporto solo la parte interessata):

=SE(C1<=100;C1*20%;SE(E(C1>100;C1<201;D1="Pippo");C1*30%; ecc.ecc

In questo caso, in A1 (dove abbiamo la nostra formula) se in C1 abbiamo 121 (e che rientra nel range di numeri previsto) ma in D1 non abbiamo il nome Pippo, non appare niente; se in D1 avremo Pippo in A1 avremo 121*30% = 36,3

Ci sono casi nei quali non è possibile usare direttamente nella formula un determinato formato di valori, è il caso di date e orari. Excel rifiuta come errore un dato che non sia in formato numerico, o testo, o i segni degli operatori di confronto (vedi guida in linea). Non possiamo scrivere ad esempio

=SE(C1=10/02/03; (perchè la barra ( / ) per excel è il segno della divisione)

oppure:

=SE(C1=10-02-03; (perchè il trattino ( - )  per excel non è un segno ammesso)

oppure:

=SE(C1=10:30:00; (perchè i due punti ( : ) per excel sono il segno di intervallo)

e neppure:

=SE(C1="10/02/03"; (perchè i doppi apici ( "" ) per excel identificano un testo, e questo renderebbe irriconoscibile il dato in C1 se scritto giustamente in formato data)

In questo caso si può ovviare usando una casella formattata ad hoc (a formato data per esempio) e nella formula richiamare il riferimento a questa cella, esempio:

=SE(C1=D1; (e in D1 avremo messo la data che serve da controllo condizione)

 

AGGIORNAMENTO.     (16/02/03) e  (17/02/08)

La Funzione =SE con più di 7 condizioni

Nel cercare una soluzione alla limitazione delle sette condizioni massime che caratterizzano la funzione SE, ho trovato un'interessante scappatoia. Una domanda postami, richiedeva l'uso di 9 condizioni da verificare, questa l'istruzione inviatami, che ovviamente non  veniva accettata da Excel con la solita segnalazione di errore:

=se(e(a1="";a2="");a3;se(e(a1="";a2=1);1;se(e(a1="";a2=-1);-1;se(e(a1=1;a2=1);1;se(e(a1=-1;a2=-1);-1;se(e(a1=1;a2=-1);-1;se(e(a1=-1;a2=1);1;se(e(a1=1;a2="")
;a3;se(e(a1=-1;a2="");A3;)))))))))

Al di la del fatto che questa formula NON prevede la condizione Se_falso (..altrimenti fammi..) e quindi non avrebbe comunque funzionato, compilata in questa maniera, fornisce i risultati previsti:

=SE(E(A1="";A2="");A3;SE(E(A1="";A2=1);1;SE(E(A1="";A2=-1);-1;SE(E(A1=1;A2=1);1;SE(E(A1=-1;A2=-1);-1;SE(E(A1=1;A2=-1);-1;))))))&SE(E(A1=-1;A2=1)
;1;SE(E(A1=1;A2="");A3;SE(E(A1=-1;A2="");A3;" ")))

Il problema è stato risolto con l'aggiunta del segno di concatenazione ( & ) dopo la sesta istruzione e, importante, con l'inserimento alla fine della sesta condizione (dopo il -1 in rosso), di un punto e virgola per evitare che Excel consideri FALSO il primo lotto di istruzioni. In chiusura delle 9 istruzioni così accettate, è stato inserito il Se_falso, cioè cosa fare se non si verifica nessuna delle 9 condizioni : lasciare la cella vuota ( " " ). Soluzione comunque dipendente dalle condizioni da verificare: è importante ad esempio che la condizione "altrimenti" (l'ultima), sia la condizione di lasciare la cella vuota.

Non vorrei definire questa soluzione una "chicca" ma non ho mai trovato finora una soluzione al problema dei 7 SE.

La soluzione sopra proposta l'ho testata anche con  un numero maggiore di condizioni: 19 condizioni per l'esattezza, e sfruttando opportunamente l'inserimento del punto e virgola e l'aggiunta del segno di concatenazione, il risultato è garantito; ecco un esempio nel quale si valutano 19 condizioni di una cella, la C15, ma la novità in questa soluzione è che vengono concatenati gruppi di 8 condizioni (quindi gruppi maggiori del limite di 7 condizioni previste !!!). Vediamo la maxi formula con i gruppi colorati diversamente; in rosso e in grassetto i punti e virgola di fine gruppo, le concatenazioni (&) e l'ultima istruzione: cosa fare altrimenti (i doppi apici "")

=SE(C15=0;8;SE(C15=1;9;SE(C15=2;10;SE(C15=3;11;SE(C15=4;12;SE(C15=5;13;SE(C15=6;14;SE(C15=7;"OK";))))))))&SE(C15=8;15;SE(C15=9;"OK";SE
(C15=10;16;SE(C15=11;"OK";SE(C15=12;"OK";SE(C15=13;17;SE(C15=14;"OK";SE(C15=15;"OK"
;))))))))&SE(C15=16;18;SE(C15>16;"SI";SE(C15<0;"NO";"")
))

in realtà in questa formula c'è una incongruenza (anche se la formula funziona) : si valuta la presenza di valori numerici nella cella C15, valori compresi tra i numeri negativi (<0) e il valore 16; il caso che C15 sia maggiore di 16 è previsto dalla 18ma condizione SE(C15>16;"SI"; - questa condizione interviene sia che C15 sia maggiore di 16, ma interviene anche se in C15 scriviamo testo !! condizione che dovrebbe essere prevista dalla condizione "altrimenti", la quale non viene chiamata in causa; basterebbe infatti modificare la condizione SE(C15>16;"SI" ad esempio in SE(C15=17;"SI" per verificare che se in C15 scriviamo "pippo" (quindi testo) la formula restituisce "vuoto" come previsto.

Ancora un esempio che vuole dimostrare come l'unione della Funzione SE con la funziona logica E consenta di articolare un numero ancora maggiore di condizioni e/o di valutazioni; nell'esempio che segue vogliamo che in funzione di valori che saranno nella cella A1 SE il valore sarà compreso in un range numerico (quindi compreso tra... e tra...),  otterremo un valore in restituzione; in pratica questa situazione:

 

SE     in  A1 abbiamo
vuota o  0
da     1 a 25
da   26 a 50
da   51 a 75
da   76 a 100
da 101 a 125
da 126 a 150
da 151 a 175
da 176 a 200

in B1 vogliamo:
0
1
2
3
4
5
6
7
8

Useremo quindi gli "operatori di confronto" "maggiore >" e "minore <" come argomenti della funzione =E, la quale diventa un argomento della funzione =SE; anche in questo esempio concateniamo (in grassetto) 6 + 3 condizioni

=SE(A1="";0;SE(E(A1>0;A1<26);1;SE(E(A1>25;A1<51);2;SE(E(A1>50;A1<76);3;SE(E(A1>75;A1<101);4;SE(E(A1>100;A1<126);5;)))&SE(E(A1>125;A1<151)
;6;SE(E(A1>150;A1<176);7;SE(E(A1>175;A1<201);8;""))))))

 

 

Buon lavoro.

prelevato sul sito http://ennius.altervista.org