10
6
VUOTA
4
abcd
5
8
efgh
VUOTA
3
i numeri mancanti sono:
1
2
7
9
ciao paoloard
http://www.riolab.org
I tuoi dati in A2:A11
in A1:J1:: =SE(VAL.NON.DISP(CERCA.VERT(RIF.COLONNA();$A$2:$A
$11;1;0));RIF.COLONNA();"") matriciale da confermare con ctrl+maiusc
+invio.
Seaumetnano le righe ... aumentare le colonne della matrice
Bye!
scossa
definisci nome rng=A1:A10
=SE(RIF.RIGA()>MAX(rng);"";SE(VAL.ERRORE(CERCA.VERT(RIF.RIGA();rng;
1;FALSO));RIF.RIGA();""))
da trascinare
ciao
andrea
> Ho un elenco disordinato di numeri, non consecutivi (ma per comoditᅵ ᅵ meglio
> che la non consecutivitᅵ sia di distanza minima di uno o due numeri),
> intermezzati anche da celle vuote o contenenti stringhe di testo.
> Trovare con una formula i numeri mancanti.
> Per esempio in questo elenco di 10 celle:
>
> 10
> 6
> VUOTA
> 4
> abcd
> 5
> 8
> efgh
> VUOTA
> 3
>
> i numeri mancanti sono:
>
> 1
> 2
> 7
> 9
>
Ciao, Paolone, evvai....
Ovviamente, piᅵ lunga rispetto alla formula di Scossa :),
quella che risolve tante situazioni:
il tuo intervallo in A1: A10,
=INDICE(RIF.RIGA($A$1:$A$10);PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA($A$1:$A$10))=0;RIF.RIGA($A$1:$A$10));RIF.RIGA(A1)))
matriciale, trascinare per 4 righe!
--
ciao
giovanna
.......................
www.riolab.org
.........................
> Ovviamente, piᅵ lunga rispetto alla formula di Scossa :),
e non avevo letto ancora Andrea!
Ma definendo un nome anche la mia si accorcia :-)
ma roberto dice che i nomi non contano per accorciare ;-)
in realta' io l'ho inserito per rendere sempre valida la formula pur
cambiano l'origine dei dati.
comunque secondo me si puo' fare di meglio con qualche matrice.
avevo pensato a questa che da l'intervallo completo dei numeri
=RIF.RIGA($A$1:INDIRETTO("A"&MAX(rng)))
ma non so come fare a fare da differenza tra le due per avere l'elenco
dei numeri mancanti
ciao
andrea
>
> ma roberto dice che i nomi non contano per accorciare ;-)
ah, vabbé!
> in realta' io l'ho inserito per rendere sempre valida la formula pur
> cambiano l'origine dei dati.
Ma il nome definito così, voglio dire 'non dinamico', lo devi sempre
ridefinire se cambi l'intervallo dei dati
> comunque secondo me si puo' fare di meglio con qualche matrice.
> avevo pensato a questa che da l'intervallo completo dei numeri
> =RIF.RIGA($A$1:INDIRETTO("A"&MAX(rng)))
per quanto detto sul nome, tanto vale scrivere questa, così:
=RIF.RIGA($A$1:$A$10)
beninteso, secondo me eh? :-)
paoloard ha spiegato il 7/24/2011 :
> Ho un elenco disordinato di numeri, non consecutivi (ma per comodità è
> meglio che la non consecutività sia di distanza minima di uno o due
> numeri), intermezzati anche da celle vuote o contenenti stringhe di testo.
> Trovare con una formula i numeri mancanti.
> Per esempio in questo elenco di 10 celle:
>
> 10
> 6
> VUOTA
> 4
> abcd
> 5
> 8
> efgh
> VUOTA
> 3
>
> i numeri mancanti sono:
>
> 1
> 2
> 7
> 9
>
Ciao, Paolone, evvai....
Ovviamente, più lunga rispetto alla formula di Scossa :),
quella che risolve tante situazioni:
il tuo intervallo in A1: A10,
=INDICE(RIF.RIGA($A$1:$A$10);PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA($A$1:$A$10))=0;RIF.RIGA($A$1:$A$10));RIF.RIGA(A1)))
matriciale, trascinare per 4 righe!
--
ciao
giovanna
.......................
www.riolab.org
.........................
----------------------------------------------------------------------------------
Innanzitutto grazie per aver aderito con entusiasmo all'invito :-)
Tiriamo un po' le fila:
Scossa: la tua formula è corretta però restituisce un elenco non continuo
(intervallato da celle vuote)
Andrea: idem
Giovanna: c'è qualche problema, prova a sostituire la prima cifra
dell'intervallo con 15, vedrai che la tua formula non restituisce i numeri
intermedi ad eccezione del 10.
Queste osservazioni ovviamente salvo errori e/o omissioni.
Io avevo trovato questa formula, peraltro lunghissima:
=SE(MAX(A$1:A$100)-CONTA.NUMERI(A$1:A$100)>RIF.RIGA(A1) -1;PICCOLO(SE(CONTA.SE(A$1:A$100;RIF.RIGA(INDIRETTO("A1:A100")))=0;RIF.RIGA($A$1:$A$100);"");RIF.RIGA(A1));"")
che però non da' nessuno degli inconvenienti sopra detti. Probabilmente
migliorabile.
Con questa ottengo tutti i numeri mancanti ma in un elenco continuo.
Cosa ne pensate?
ciao paoloard
http://www.riolab.org
=SE(MAX(A$1:A$100)-CONTA.NUMERI(A$1:A$100)>RIF.RIGA(A1) -1;PICCOLO(SE(CONTA.SE(A$1:A$100;RIF.RIGA(INDIRETTO("A1:A100")))=0;RIF.RIGA($A$1:$A$100);"");RIF.RIGA(A1));"")
che però non da' nessuno degli inconvenienti sopra detti. Probabilmente
migliorabile.
Con questa ottengo tutti i numeri mancanti ma in un elenco continuo.
Cosa ne pensate?
ciao paoloard
http://www.riolab.org
--------------------------------------------------------------------------------
mmmmm.... scusate:
=SE(MAX(A$1:A$100)-CONTA.NUMERI(A$1:A$100)>RIF.RIGA(A1) -1;PICCOLO(SE(CONTA.SE(A$1:A$100;RIF.RIGA($A$1:$A$100))=0;RIF.RIGA($A$1:$A$100);"");RIF.RIGA(A1));"")
ciao paoloard
http://www.riolab.org
> Giovanna: c'è qualche problema, prova a sostituire la prima cifra
> dell'intervallo con 15, vedrai che la tua formula non restituisce i numeri
> intermedi ad eccezione del 10.
Certo Paolo,
io ho considerato, nello scrivere la formula, che il valore max del
range era 10. L'avrei adattata avendo un altro max.
Per es, sempre i val iniziali in A1:A10, con max 20:
=INDICE(RIF.RIGA($A$1:$A$20);PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA($A$1:$A$20))=0;RIF.RIGA($A$1:$A$20));RIF.RIGA(A1)))
trascinata fino a ottenere 19,
restituisce tutti i mancanti in elenco continuo.
> Queste osservazioni ovviamente salvo errori e/o omissioni.
> Io avevo trovato questa formula, peraltro lunghissima:
> =SE(MAX(A$1:A$100)-CONTA.NUMERI(A$1:A$100)>RIF.RIGA(A1)
> -1;PICCOLO(SE(CONTA.SE(A$1:A$100;RIF.RIGA(INDIRETTO("A1:A100")))=0;RIF.RIGA($A$1:$A$100);"");RIF.RIGA(A1));"")
> che però non da' nessuno degli inconvenienti sopra detti. Probabilmente
> migliorabile.
Ora la provo, certo non so se riesco nel miglioramento!
> =SE(MAX(A$1:A$100)-CONTA.NUMERI(A$1:A$100)>RIF.RIGA(A1)
> -1;PICCOLO(SE(CONTA.SE(A$1:A$100;RIF.RIGA($A$1:$A$100))=0;RIF.RIGA($A$1:$A$100);"");RIF.RIGA(A1));"")
>
Paolo,
rispetto alla mia la tua gestisce, con il SE(), l'esaurimento delle
occorrenze. La mia restituisce il #NUM! se trascinata oltre il numero
di valori mancanti.
giusto :-)
risolvibile eventualmente definendo il nome cosi':
rng=$A:$A se siamo sicuri che non ci siano altri numeri nella colonna
o eventualmente mettendo un intervallo sicuramente piu' grande del
numero massimo atteso
comunque penso ancora che con le matrici si possa fare di meglio
ciao
andrea
paoloard ha usato la sua tastiera per scrivere :
> Giovanna: c'è qualche problema, prova a sostituire la prima cifra
> dell'intervallo con 15, vedrai che la tua formula non restituisce i numeri
> intermedi ad eccezione del 10.
Certo Paolo,
io ho considerato, nello scrivere la formula, che il valore max del
range era 10. L'avrei adattata avendo un altro max.
Per es, sempre i val iniziali in A1:A10, con max 20:
=INDICE(RIF.RIGA($A$1:$A$20);PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA($A$1:$A$20))=0;RIF.RIGA($A$1:$A$20));RIF.RIGA(A1)))
trascinata fino a ottenere 19,
restituisce tutti i mancanti in elenco continuo.
--------------------------------------------------------------------
certo Gio, è vero, però mi permetto di insistere. La tua formula secondo me
ha due problemi:
il primo è che se aumenti l'estremo dell'intervallo, poniamo a 100 o più
(Andrea infatti ha proposto un intervallo $A:$A), la formula restituisce
anche i numeri che vanno oltre il valore del numero massimo dell'elenco
(questo succede anche con la formula di Scossa (ciao);
il secondo è che restituisce un messaggio di errore se oltrepassi il limite
dei numeri mancanti.
Sarei quindi del parere che andrebbe migliorata la prima parte della formula
che ho proposto, ammesso che lo sia, anche perché la seconda parte è
concettualmente uguale alla tua.
In definitiva, forse dovevo specificarlo meglio all'inizio, la formula
dovrebbe essere impostata anche su di un intervallo eccedente quello
corrente e restituire l'elenco continuo dei numeri mancanti fino al valore
massimo in elenco e stringa nulla oltre.
Però, visto che ci siamo, per rendere la formula universale vorrei
complicare le cose: e se volessi lo stesso risultato però riferito ad un
intervallo discontinuo di numeri che va da un minimo ad un massimo e non
necessariamente da 1?
Per facilitare le cose metto qui il file "Trova numeri mancanti.xls"con le
varie soluzioni:
https://skydrive.live.com/?wa=wsignin1.0&sa=82778661#!/?cid=119877c26b75dcc7&sc=documents&uc=1&id=119877C26B75DCC7%21154
ciao paoloard
http://www.riolab.org
> Certo Paolo,
> io ho considerato, nello scrivere la formula, che il valore max del range era
> 10. L'avrei adattata avendo un altro max.
> Per es, sempre i val iniziali in A1:A10, con max 20:
>
> =INDICE(RIF.RIGA($A$1:$A$20);PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA($A$1:$A$20))=0;RIF.RIGA($A$1:$A$20));RIF.RIGA(A1)))
>
> trascinata fino a ottenere 19,
>
> restituisce tutti i mancanti in elenco continuo.
È quella che mi piace di più.
Dalla quale, con qualche (12) byte in meno:
=INDEX(ROW($1:$30),SMALL(IF(COUNTIF($A$1:$A$10,ROW($1:$30))=0,ROW($1:$30)),ROW(A1)))
Dalla quale, senza alcun riguardo alla lunghezza:
=INDEX(ROW(INDIRECT("1:" &
MAX($A$1:$A$10))),SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT("1:" &
MAX($A$1:$A$10))))=0,ROW(INDIRECT("1:" & MAX($A$1:$A$10)))),ROW(A1)))
Bruno
giovanna on 24-07-11 wrote:
> Certo Paolo,
> io ho considerato, nello scrivere la formula, che il valore max del range
> era 10. L'avrei adattata avendo un altro max.
> Per es, sempre i val iniziali in A1:A10, con max 20:
>
> =INDICE(RIF.RIGA($A$1:$A$20);PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA($A$1:$A$20))=0;RIF.RIGA($A$1:$A$20));RIF.RIGA(A1)))
>
> trascinata fino a ottenere 19,
>
> restituisce tutti i mancanti in elenco continuo.
È quella che mi piace di più.
Dalla quale, con qualche (12) byte in meno:
=INDEX(ROW($1:$30),SMALL(IF(COUNTIF($A$1:$A$10,ROW($1:$30))=0,ROW($1:$30)),ROW(A1)))
Dalla quale, senza alcun riguardo alla lunghezza:
=INDEX(ROW(INDIRECT("1:" &
MAX($A$1:$A$10))),SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT("1:" &
MAX($A$1:$A$10))))=0,ROW(INDIRECT("1:" & MAX($A$1:$A$10)))),ROW(A1)))
Bruno
------------------------------------------------------------
ciao Bruno, lieto che partecipi :-)
mentre la prima ha lo stesso problema che ho segnalato a Giovanna, ovvio è
identica, la seconda ha solo l'inconveniente di restituire errore #NUM!
superata la soglia del valore massimo.
ciao paoloard
http://www.riolab.org
questa e' la mia modificata per considerare solo tra un valore minimo
ed uno massimo.
non risolve pero' la discontinuita' dei risultati
=SE(O(RIF.RIGA()>MAX(A:A);RIF.RIGA()<MIN(A:A));"";SE(VAL.ERRORE(CERCA.VERT(RIF.RIGA();A:A;
1;FALSO));RIF.RIGA();""))
ciao
andrea
> certo Gio, ᅵ vero, perᅵ mi permetto di insistere. La tua formula secondo me
> ha due problemi:
> il primo ᅵ che se aumenti l'estremo dell'intervallo, poniamo a 100 o piᅵ
> (Andrea infatti ha proposto un intervallo $A:$A), la formula restituisce
> anche i numeri che vanno oltre il valore del numero massimo dell'elenco
si si, certo, ripeto che la mia formula (il suo limite, ok) era pensata
per il caso specifico.
> il secondo ᅵ che restituisce un messaggio di errore se oltrepassi il limite
> dei numeri mancanti.
si, anche quello volutamente trascurato per non appesantire.
> Perᅵ, visto che ci siamo, per rendere la formula universale vorrei complicare
> le cose: e se volessi lo stesso risultato perᅵ riferito ad un intervallo
> discontinuo di numeri che va da un minimo ad un massimo e non necessariamente
> da 1?
Ho pensato a questa:
=SE.ERRORE(PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA(INDIRETTO(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))))=0;RIF.RIGA(INDIRETTO(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))));RIF.RIGA(A1));"")
gestisce anche l'errore.... :-)
(non mi dire che non ᅵ valido il SE.ERRORE() che non c'ᅵ nelle versioni
fino a 2003 eheh...)
> Per facilitare le cose metto qui il file "Trova numeri mancanti.xls"con le
> varie soluzioni:
> https://skydrive.live.com/?wa=wsignin1.0&sa=82778661#!/?cid=119877c26b75dcc7&sc=documents&uc=1&id=119877C26B75DCC7%21154
>
ehi, visto il file.
Capisco che tu hai voluto "generalizzare" ma,
secondo me non ᅵ proprio corretto aver attribuito a me e Scossa le
formule cosᅵ come le hai trascritte. Avevamo precisato la variazione
degli intervalli a seconda del caso specifico! :-)
> ciao Bruno, lieto che partecipi :-)
> mentre la prima ha lo stesso problema che ho segnalato a Giovanna, ovvio è
> identica, la seconda ha solo l'inconveniente di restituire errore #NUM!
> superata la soglia del valore massimo.
Beh, il rimedio non è difficile:
{=IF(ISERROR(INDEX(ROW(INDIRECT("1:" &
MAX($A$1:$A$10))),SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT("1:" &
MAX($A$1:$A$10))))=0,ROW(INDIRECT("1:" &
MAX($A$1:$A$10)))),ROW(A1)))),"",INDEX(ROW(INDIRECT("1:" &
MAX($A$1:$A$10))),SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT("1:" &
MAX($A$1:$A$10))))=0,ROW(INDIRECT("1:" & MAX($A$1:$A$10)))),ROW(A1))))}
E volendo considerare anche lo zero, sempre da giovanna:
{=INDEX(ROW(INDIRECT("1:" &
MAX($A$1:$A$10)+1))-1,SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT("1:" &
MAX($A$1:$A$10)+1))-1)=0,ROW(INDIRECT("1:" &
MAX($A$1:$A$10)+1))),ROW(A1)))}
Bruno
cut> Perᅵ, visto che ci siamo, per rendere la formula universale vorrei
complicare
> le cose: e se volessi lo stesso risultato perᅵ riferito ad un intervallo
> discontinuo di numeri che va da un minimo ad un massimo e non
> necessariamente da 1?
Ho pensato a questa:
=SE.ERRORE(PICCOLO(SE(CONTA.SE($A$1:$A$10;RIF.RIGA(INDIRETTO(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))))=0;RIF.RIGA(INDIRETTO(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))));RIF.RIGA(A1));"")
gestisce anche l'errore.... :-)
(non mi dire che non ᅵ valido il SE.ERRORE() che non c'ᅵ nelle versioni
fino a 2003 eheh...)
--------------------------------------------------
Ottimo Gio! E come poterne dubitare! ;-)
Per quanto riguarda l'uso del SE.ERRORE...... beh, prima o poi bisognerᅵ
pure usarlo no? ;-)
> Per facilitare le cose metto qui il file "Trova numeri mancanti.xls"con le
> varie soluzioni:
> https://skydrive.live.com/?wa=wsignin1.0&sa=82778661#!/?cid=119877c26b75dcc7&sc=documents&uc=1&id=119877C26B75DCC7%21154
>
ehi, visto il file.
Capisco che tu hai voluto "generalizzare" ma,
secondo me non ᅵ proprio corretto aver attribuito a me e Scossa le
formule cosᅵ come le hai trascritte. Avevamo precisato la variazione
degli intervalli a seconda del caso specifico! :-)
faccio ammenda, ma avevo messo il file in rete solo per farvi vedere
l'effetto delle varie formule affiancate cosᅵ come erano state proposte.
Affinchᅵ non ti arrabbi, cosa che sarebbe estremamente spiacevole per me
perchᅵ mi farebbe sprofondare nella piᅵ nera delle nere disperazioni,
provvedo immediatamente a togliere il file da SkyDrive :-)
ciao paoloard
http://www.riolab.org
paoloard on 24-07-11 wrote:
Bruno
------------------------------------------------
Ok Bruno, e per l'intervallo delimitato?
ciao paoloard
http://www.riolab.org
> ma avevo messo il file in rete solo per farvi vedere
> l'effetto delle varie formule affiancate così come erano state proposte.
e dagli! :-D
(guarda che non sono arrabbiata!)
"delle varie formule affiancate" ipotizzando in tutte l'intervallo
1:100 (o una roba del genere)
> Affinché non ti arrabbi, cosa che sarebbe estremamente spiacevole per me
> perché mi farebbe sprofondare nella più nera delle nere disperazioni,
> provvedo immediatamente a togliere il file da SkyDrive :-)
>
:D :D :D :D
ma che matto!
> Ok Bruno, e per l'intervallo delimitato?
>
Sarebbe a dire?
Bruno
paoloard on 25-07-11 wrote:
Sarebbe a dire?
Bruno
-----------------------------------------------
Mio post del 24/7 ore 21:42, stralcio:
"....
Perᅵ, visto che ci siamo, per rendere la formula universale vorrei
complicare le cose: e se volessi lo stesso risultato perᅵ riferito ad un
intervallo discontinuo di numeri che va da un minimo ad un massimo e non
necessariamente da 1?
"
ciao paoloard
http://www.riolab.org
Cosᅵ?
{=INDEX(ROW(INDIRECT(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))),SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))))=0,ROW(INDIRECT(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10)))),ROW(A1))-MIN($A$1:$A$10)+1)}
Bruno
cut
> Mio post del 24/7 ore 21:42, stralcio:
> "....
> Perᅵ, visto che ci siamo, per rendere la formula universale vorrei
> complicare le cose: e se volessi lo stesso risultato perᅵ riferito ad un
> intervallo discontinuo di numeri che va da un minimo ad un massimo e non
> necessariamente da 1?
> "
Cosᅵ?
{=INDEX(ROW(INDIRECT(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))),SMALL(IF(COUNTIF($A$1:$A$10,ROW(INDIRECT(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10))))=0,ROW(INDIRECT(MIN($A$1:$A$10)&":"&MAX($A$1:$A$10)))),ROW(A1))-MIN($A$1:$A$10)+1)}
Bruno
---------------------------------------------------------------
Esatto. Fra tutte la migliore resta quella di Giovanna, ᅵ la piᅵ corta e non
dᅵ messaggio di errore (pur usando la funzione SE.ERRORE che ᅵ stata
introdotta solo dalla versione 2007).
La piᅵ universale perᅵ ᅵ questa, elimina la segnalazione di errore pur
valendo anche per versioni precedenti:
=SE(MAX(A$1:A$100)-CONTA.NUMERI(A$1:A$100)>MIN(A$1:A$100)+
RIF.RIGA(A1)-2;PICCOLO(SE(CONTA.SE(A$1:A$100;RIF.RIGA($A$1:$A$100))=0;RIF.RIGA($A$1:$A$100);"");MIN(A$1:A$100)+
RIF.RIGA(A1)-1);"")
Grazie a tutti.
ciao paoloard
http://www.riolab.org