Ovviamente voglio che la funzione restituisca un valore a seconda se il
valore numerico che vado a considerare sia inserito nel primo nel secondo o
nel terzo intervallo.
quindi avrei bisogno di 3 uscite....non di 2....come è possibile farlo ?
grazie mille
Potresti usare la funzione SE() nidificando al suo interno altre funzioni
SE(); leggi l'esempio N°3 al link:
http://www.dotnethell.it/tips/FunctionIFExcel.aspx
NB: per alcune versioni di Excel, puoi nidificare al massimo *sette* SE(); a
tal proposito, per ovviare al predetto problema, dai uno sguardo ai
suggerimenti dati nel thread:
Ciao
Pippo
Ciao Tony.
Supponendo che questa "cosa" tu voglia immetterla in una cella come
"formula", devi considerare che da *una* formula ottieni *un* risultato.
Si tratta quindi di decidere che risultato vuoi ottenere, in base a
determinate condizioni.
Quali sono, quindi? Vediamo...
Scrivi: "A=0-100". Come la dobbiamo leggere? Che "A" puo' assumere
valori che vanno da 0 a 100? Oppure che il valore di "A" e' la
differenza fra 0 e 100, cioe' -100? Eppoi, se per te "A" e' qualcosa,
per noi no. Quindi... cos'e' "A" per te?
Idem per "B". Ribadendo... Cos'e' "B" per te?
"C= >1000" cosa vuol dire? Che "C"... deve essere... maggiore di 1000?
Un'altra cosa non capisco... Parli di primo, secondo e terzo
intervallo... Ma esattamente di che intervalli si tratta? Tre celle? Tre
intervalli di piu' celle ciascuno? Invece di farceli immaginare indica
le loro precise coordinate.
Per esempio con:
A1: 0
B1: 100
C1: 1001
D1: =SE(E(E(0<=A1;A1<=100);E(100<=B1;B1<=1000);C1>1000);"Boh";"Mah")
Si ottiene:
D1: Boh
E' questo che intendi?
-oppure-
D1:
=SE(E(0<=A1;A1<=100);"Boh";SE(E(100<=B1;B1<=1000);"Mah";SE(C1>1000;"Sara'";"O
no?")))
--
(Facci sapere se e eventualmente come hai risolto. Grazie.)
Maurizio Borrelli [Microsoft Excel MVP]
http://www.riolab.org
Non so se ho capito, e tu mica ti sei spieagato tanto bene!
=(D4>0)*(D4<=100)*11+(D4>100)*(D4<=1000)*12+(D4>1000)*13
Se in D4 vi è un numero N tale che
0 < N <= 100 la formula restituisce 11
100 < N <= 1000 " " " 12
N > 1000 " " " 13
Bruno
> Salve.
ciao Tony
a tantoni, ...
prova a in un foglio nuovo a costruire quanto segue:
| A | B |C | D | E |
--+-----+---------+--+----+------+
1| 0|maurizio | | 100|bruno |
2| 100|bruno | | | |
3| 1000|cucch | | | |
in E2 inserisci:
=CERCA.VERT(D1;A1:B3;2)
quindi, al variare del contenuto di D1 otterrai
uno dei tre nomi
E' questo che chiedevi?
()---cucchiaino
Hai risolto le due precedenti ambiguità.
Quindi:
B1 < 100 ==> "A"
100 <= B1 <= 1000 ==> "B"
B1 > 1000 ==> "C"
Ora potrai sperare nell'intervento si qualche anima pia.
Bruno
Prova con:
=SE(B1<100;"A";SE(E(B1>=100;B1<=1000);"B";"C"))
*PS* : dai anche uno sguardo all'esempio che ti ho segnalato in questo
stesso thread
Ciao
Pippo
Ciao,
tanto per variare:
=CODICE.CARATT(CONFRONTA(A1;{0\100\1000})+64)
ivano
Ciao Tony.
> Mi spiego meglio, forse č piů semplice di quanto qualcuno di voi ha
> ipotizzato.
Ammettiamo, ma tu hai capito che e' *insensato* che noi si debba
ipotizzare *sia* il problema, *sia* la soluzione? Descrivere il problema
toccherebbe a te... ;-)
> La mia funzione SE inserita mettiamo nella casella A1 controlla un
> valore nella casella B1
> Se il valore nella casella B1 č minore di 100 nella casella A1 deve
> essere scritto "A" , se il valore della casella B1 č tra 100 e 1000
> deve scrivere "B", in tutti gli altri casi ( per esclusione quindi
> >1000 ) deve scrivere "C"
> ora credo sia + chiaro per tutti
Ora e' tutto chiaro, prima pero' non mancava solo la chiarezza, ma anche
le informazioni!...
Un modo:
A1: =SE(B1>1000;"C";SE(B1<100;"A";"B"))
> Ciao,
> tanto per variare:
> =CODICE.CARATT(CONFRONTA(A1;{0\100\1000})+64)
> ivano
Da me MATCH nella lista {} porta solo virgola (per colonne)
e punto-e-virgola per righe; non accetta "\".
E comunque per A1 = 1000 mi rende "C" e non "B".
Ciao
Bruno
Ottengo anche io lo stesso risultato per A1 = 1000: credo sia dovuto proprio
alla definizione stessa della funzione CONFRONTA().
Dalla guida:
CONFRONTA(valore;matrice;corrisp)
Se corrisp è 1 o e' omesso, CONFRONTA troverà il valore più grande che è
minore o uguale a valore...
Inoltre, inserendo un numero *negativo* (condizione A1<100) si ottiene un
errore #N/D.
Ammettendo solo numeri *positivi* e con un'approssimazione di tre decimali,
si potrebbe scrivere:
=CODICE.CARATT(CONFRONTA(A1;{0\100,001\1000,001})+64)
Cosa ne pensate?
Io penso che la mia soluzione e' moooolto rozza.. :-))
Ciao
Pippo
[cut]
> Ammettendo solo numeri *positivi* e con un'approssimazione di tre
> decimali, si potrebbe scrivere:
>
> =CODICE.CARATT(CONFRONTA(A1;{0\100,001\1000,001})+64)
>
> Cosa ne pensate?
>
> Io penso che la mia soluzione e' moooolto rozza.. :-))
>
Ops, ... mi e' partito un "clic", volevo scrivere:
=CODICE.CARATT(CONFRONTA(A1;{0\100\1000,001})+64)
Ciao
Pippo
Ciao Pippo.
[...]
> >> tanto per variare:
> >> =CODICE.CARATT(CONFRONTA(A1;{0\100\1000})+64)
[...]
> Ammettendo solo numeri *positivi* e con un'approssimazione di tre
> decimali, si potrebbe scrivere:
> =CODICE.CARATT(CONFRONTA(A1;{0\100,001\1000,001})+64)
> Cosa ne pensate?
Perche'?... C'e' qualcosa da pensare, al riguardo?
> Io penso che la mia soluzione e' moooolto rozza.. :-))
Parli di soluzione. Ok. Ma il problema qual e'? Far "funzionare"
*comunque*, adattandola a cio' per cui non e' nata, la (splendida)
formula di Ivano? Se questo e' il problema... e' un tuo problema. ;-) Se
il problema e' un altro... parlacene.
Prima i problemi, poi le soluzioni.
--
> [...]
>> >> tanto per variare:
>> >> =CODICE.CARATT(CONFRONTA(A1;{0\100\1000})+64)
> [...]
>> Ammettendo solo numeri *positivi* e con un'approssimazione di tre
>> decimali, si potrebbe scrivere:
>> =CODICE.CARATT(CONFRONTA(A1;{0\100,001\1000,001})+64)
>> Cosa ne pensate?
>
> Perche'?... C'e' qualcosa da pensare, al riguardo?
>
>> Io penso che la mia soluzione e' moooolto rozza.. :-))
>
> Parli di soluzione. Ok. Ma il problema qual e'? Far "funzionare"
> *comunque*, adattandola a cio' per cui non e' nata, la (splendida) formula
> di Ivano? Se questo e' il problema... e' un tuo problema. ;-) Se il
> problema e' un altro... parlacene.
> Prima i problemi, poi le soluzioni.
Infatti, mi sono espresso *male*, pur avendo cmq scritto: *rozza* ...
nell'infelice speranza di lasciar intedere la *bruttura* che avevo imposto
alla formula di Ivano... :-))
..cmq, volevo principalmente, cercare di rispondere all'osservazione di
"Bruno" in questo thread, che scriveva:
[begin]
E comunque per A1 = 1000 mi rende "C" e non "B".
[end]
Ciao e grazie mille!
Pippo
[...]
> >> >> tanto per variare:
> >> >> =CODICE.CARATT(CONFRONTA(A1;{0\100\1000})+64)
[...]
> >> =CODICE.CARATT(CONFRONTA(A1;{0\100,001\1000,001})+64)
> Infatti, mi sono espresso *male*, pur avendo cmq scritto: *rozza* ...
> nell'infelice speranza di lasciar intedere la *bruttura* che avevo
> imposto alla formula di Ivano... :-))
> ..cmq, volevo principalmente, cercare di rispondere all'osservazione di
> "Bruno" in questo thread, che scriveva:
> [begin]
> E comunque per A1 = 1000 mi rende "C" e non "B".
> [end]
Ciao Pippo.
D'accordo... Diciamo che Ivano, nella foga di offrirci un giochino col
quale trastullarci, ha perso parzialmente di vista la richiesta dell'OP.
Avrebbe potuto scrivere, per esempio:
=CODICE.CARATT(CONFRONTA(A1;{0\100\1001})+64)
e forse Bruno se ne sarebbe stato buono, e tu con lui. :D
Resta il fatto che questa formula, per sua natura, e' soluzione,
probabilmente ottimale, per una ristrettissima e specifica gamma di
problemi. Mi riferisco al fatto che restituisce un solo carattere, non
all'uso della funzione CONFRONTA.
> D'accordo... Diciamo che Ivano, nella foga di offrirci un giochino col
> quale trastullarci, ha perso parzialmente di vista la richiesta dell'OP.
> Avrebbe potuto scrivere, per esempio:
>
> =CODICE.CARATT(CONFRONTA(A1;{0\100\1001})+64)
>
> e forse Bruno se ne sarebbe stato buono, e tu con lui. :D
No, Bruno non se ne sarebbe stato buono comunque.
"> 1000" significa 1001 come 1001.001 come 1001.000000...x,
salvo venga precisato doversi trattare unicamente di valori interi.
E salvo che la logica non sia un'opinione.
Ma la stranezza č nella formulazione dell'OP.
Per coerenza di logica fra le varie classi non si dovrebbe
definire:
B1 < 100 ==> "A"
100 <= B1 <= 1000 ==> "B"
B1 > 1000 ==> "C"
bensě:
B1 < = 100 ==> "A"
100 < B1 <= 1000 ==> "B"
B1 > 1000 ==> "C"
E la formula di Ivano sarebbe perfetta!
Se poi il problema richiede la prima enunciazione,
allora occorre cambiare soluzione.
Bruno
[...]
> > =CODICE.CARATT(CONFRONTA(A1;{0\100\1001})+64)
> > e forse Bruno se ne sarebbe stato buono, e tu con lui. :D
> No, Bruno non se ne sarebbe stato buono comunque.
> "> 1000" significa 1001 come 1001.001 come 1001.000000...x,
> salvo venga precisato doversi trattare unicamente di valori interi.
> E salvo che la logica non sia un'opinione.
[...]
Ciao Bruno.
C'e' un "salvo" che hai saltato: salvo che non si rilegga, come ha fatto
Pippo, la Guida a proposito della funzione CONFRONTA(), terzo argomento
(Corrisp). Vediamo in pratica:
| A | B |
--+--------+--------+
1 | 0 | 0 |
2 | 100 | 100 |
3 | 1000 | 1001 |
4 | | |
5 | 1000,5 | 1000,5 |
6 | 3 | 2 |
A6: =CONFRONTA(A5;A1:A3)
B6: =CONFRONTA(B5;B1:B3)
I valori interi, come vedi, non c'entrano.
Potrebbero pero', interessare, la prima condizione richiesta dal problema
posto da Tony: A1<100; quindi, potrei avere un intero *negativo*, es. -1,
che, verifica la predetta condizione, ma, genera un errore(#N/D) nella
funzione CONFRONTA(A1;{0\100\1000}).....
PS: Spero di non aver detto una ca**ata.. ;-))
Ciao
Pippo
> Ciao Bruno.
>
> C'e' un "salvo" che hai saltato: salvo che non si rilegga, come ha fatto
> Pippo, la Guida a proposito della funzione CONFRONTA(), terzo argomento
> (Corrisp). Vediamo in pratica:
>
> | A | B |
> --+--------+--------+
> 1 | 0 | 0 |
> 2 | 100 | 100 |
> 3 | 1000 | 1001 |
> 4 | | |
> 5 | 1000,5 | 1000,5 |
> 6 | 3 | 2 |
>
> A6: =CONFRONTA(A5;A1:A3)
> B6: =CONFRONTA(B5;B1:B3)
>
> I valori interi, come vedi, non c'entrano.
Dopodiché la funzione di Ivano funziona come dovrebbe
secondo lo schema originario dell'OP?
Bisogna che smetta di parlare con te, mi si attorcigliano
la budella.
Bruno
>>
>> C'e' un "salvo" che hai saltato: salvo che non si rilegga, come ha fatto
>> Pippo, la Guida a proposito della funzione CONFRONTA(), terzo argomento
>> (Corrisp). Vediamo in pratica:
>>
>> | A | B |
>> --+--------+--------+
>> 1 | 0 | 0 |
>> 2 | 100 | 100 |
>> 3 | 1000 | 1001 |
>> 4 | | |
>> 5 | 1000,5 | 1000,5 |
>> 6 | 3 | 2 |
>>
>> A6: =CONFRONTA(A5;A1:A3)
>> B6: =CONFRONTA(B5;B1:B3)
>>
>> I valori interi, come vedi, non c'entrano.
>
> Dopodiché la funzione di Ivano funziona come dovrebbe
> secondo lo schema originario dell'OP?
>
> Bisogna che smetta di parlare con te, mi si attorcigliano
> la budella.
Non credo.... ;-))
Riprendendo la *tua* formula che avevi inizialmente proposto, ed apportando
qualche modifica:
=SE(VAL.ERRORE(SCEGLI((B1<>"")*(B1<100)*1+(B1>=100)*(B1<=1000)*2+(B1>1000)*3;"A";"B";"C"));"";SCEGLI((B1<>"")*(B1<100)*1+(B1>=100)*(B1<=1000)*2+(B1>1000)*3;"A";"B";"C"))
....dovrebbe funzionare?!.... ;-))
PS: forse, la suddetta formula, si puo' semplificare utilizzando le funzioni
logiche E() ed O().....ma la stanchezza incomincia a farsi sentire.. ;-)))
Ciao
Pippo
Ciao Pippo.
[...]
> >> > =CODICE.CARATT(CONFRONTA(A1;{0\100\1001})+64)
[...]
> > Vediamo in pratica:
> > | A | B |
> > --+--------+--------+
> > 1 | 0 | 0 |
> > 2 | 100 | 100 |
> > 3 | 1000 | 1001 |
> > 4 | | |
> > 5 | 1000,5 | 1000,5 |
> > 6 | 3 | 2 |
> > A6: =CONFRONTA(A5;A1:A3)
> > B6: =CONFRONTA(B5;B1:B3)
> > I valori interi, come vedi, non c'entrano.
> Potrebbero pero', interessare, la prima condizione richiesta dal
> problema posto da Tony: A1<100;
[...]
Ehm... Nel primo post Tony aveva scritto:
A=0-100
B=100-1000
C= >1000
e nel post successivo aveva indicato come interpretare tale notazione,
pero' contraddicendosi in parte...
'Se il valore nella casella B1 è minore di 100 nella casella A1 deve
essere scritto "A" , se il valore della casella B1 è tra 100 e 1000 deve
scrivere "B", in tutti gli altri casi ( per esclusione quindi >1000 )
deve scrivere "C"'.
... introducendo quel "minore di 100" che ora ci fa mal di pancia.
Minore di 100 vuol dire: compreso fra *il piu' piccolo numero intero
negativo gestibile da Excel* e 100. Quindi la formula di Ivano
diventerebbe, forse:
=CODICE.CARATT(CONFRONTA(B1;{-9,99999999999999E+307\100\1001})+64)
e sottolineo forse perche', ripeto nuovamente, io la questione dei
limiti di Excel, colpevolmente, non l'ho mai approfondita.
[cut]
> 'Se il valore nella casella B1 è minore di 100 nella casella A1 deve
> essere scritto "A" , se il valore della casella B1 è tra 100 e 1000 deve
> scrivere "B", in tutti gli altri casi ( per esclusione quindi >1000 ) deve
> scrivere "C"'.
> ... introducendo quel "minore di 100" che ora ci fa mal di pancia.
:-))
> Minore di 100 vuol dire: compreso fra *il piu' piccolo numero intero
> negativo gestibile da Excel* e 100. Quindi la formula di Ivano
> diventerebbe, forse:
>
> =CODICE.CARATT(CONFRONTA(B1;{-9,99999999999999E+307\100\1001})+64)
>
> e sottolineo forse perche', ripeto nuovamente, io la questione dei limiti
> di Excel, colpevolmente, non l'ho mai approfondita.
OK! Grazie Maurizio!
Ciao
Pippo