Newsgroup: it.comp.os.win.software
Titolo: funzioni di ricerca con excel

Sto realizzando un archivio dei libri di un piccolo ufficio. Pensavo alla
possibilita' di trovare un libro scrivendo semplicemente in una cella il
nome dell'autore o viceversa.
Un sistema l'avrei trovato, ma mi lascia alcuni dubbi. Lo metto al vostro
vaglio, cosi' magari mi potrete dire se si puo' fare di meglio come
immagino.
Chiamiamo MATRICE la tabella che contiene tutti i dati che si possono
cercare e AUTORI la colonna contenenti i nomi degli autori.
Ho creato un sistema per cui, scrivendo il nome di un autore in una cella
automaticamente in altre celle vengono visualizzate le informazioni relative
al libro da lui scritto. Fin qui non c'e' nessun problema, si puo' usare
CERCA.VERT oppure INDICE e CONFRONTA insieme. Il problema si pone
allorquando un autore ha scritto piu' libri, in questo caso viene
visualizzato solo il primo.
Ho risolto cosi':
considerando che la cella C151 e' quella in cui si immette il nome
dell'autore, in un'altra cella ho inserito questa formula:
=
CONTA.SE
(AUTORI;C151)-1, per conoscere il numero dei libri scritti da
quell'autore oltre al primo che viene visualizzato appena si inserisce il
nome dell'autore in C151.
Ecco la formula per trovare il titolo del libro:
=INDICE(MATRICE;CONFRONTA($C$151;AUTORI;0)+$C$154;2)
dove C154 e' la cella in cui inserire il numero voluto nel caso in cui il
risultato della formula 
CONTA.SE
 sia superiore a 0, cioe' nel caso in cui
l'autore abbia scritto piu' libri presenti nell'archivio. Di default questa
cella deve essere impostata senza nessun valore;
e 2 e' il numero di colonna in cui cercare i titoli.
La mia domanda e': ci sono altri sistemi migliori di questo per cercare i
dati in una tabella?
Se non ce ne sono, come si puo' fare perche' le celle C151 e C154 ogni volta
che si riapre il file risultino vuote? Credo che bisogna ricorrere al VB, o
sbaglio?
Grazie
Max
lucamax{chioc...}
libero.it

nome dell'autore o viceversa.
Magari non soddisfa le tue esigenze ma la cosa piu' semplice da fare
mi sembra utilizzare il filtro automatico


In effetti non soddisfa appieno le mie esigenze. Pensavo alla possibilita'
di far evitare all'utente la consultazione della tabella.
Grazie
Ciao, Max

 In effetti non soddisfa appieno le mie esigenze. Pensavo alla possibilita'
di far evitare all'utente la consultazione della tabella.
Allora il filtro avanzato. Piu` qualche riga di Visual Basic, se proprio
vuoi qualcosa un po' piu` "fool-proof"...
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

di far evitare all'utente la consultazione della tabella.
Ho scoperto che puoi farlo abbastanza agevolmente registrando una
macro che sfrutti il "filtro avanzato".

 macro che sfrutti il "filtro avanzato".
Vedo che mi proponete sia tu che Maurizio la stessa cosa. Il problema e' che
non so usare il VBA.
Oggi non sono nemmeno riuscito a creare una funzione che aumentasse di 1 il
valore di una cella al clickare di un tasto. Credo che sia una stupidata
enorme ma non per me.
Ma tornando al filtro avanzato, avete voglia di spiegarmi meglio?
Oppure siamo proprio sicuri che non esista una funzione che permetta di
calcolare la differenza di celle in una colonna tra due valori identici?
Esempio:
       A
1    10
2      5
3      7
4      5
5    12
C'e' un metodo per conoscere la differenza di righe tra i due valori
identici "5"? In pratica il risultato dovrebbe dare 2. Io ho spulciato tutto
l'help delle funzioni e non sono riuscito a trovare niente, ma magari la
soluzione e' semplicissima e sto annegando in un bicchier d'acqua.
Grazie.
Max
lucamax{*ola}
libero.it

Ma tornando al filtro avanzato, avete voglia di spiegarmi meglio?
Nello stesso foglio di lavoro in cui hai la matrice, in una zona
defilata fai copia/incolla della riga di intestazione della matrice.
Quella riga e quelle sotto faranno parte della matrice "intervallo
criteri", li' andrai a scrivere quello che cerchi. 

 C'e' un metodo per conoscere la differenza di righe tra i due valori
identici "5"? In pratica il risultato dovrebbe dare 2. Io ho spulciato tutto
l'help delle funzioni e non sono riuscito a trovare niente, ma magari la
soluzione e' semplicissima e sto annegando in un bicchier d'acqua.
Caro max, mi dispiace. Avevo messo la tua domanda in una cartellina
sbagliata... Come vanno le cose? Hai risolto? Se vuoi possiamo ancora
parlarne.


 parlarne.
Ciao Maurizio,
non ti devi certo scusare, se aiuti qualcuno e' una cortesia che fai, non e'
mica un dovere.
Ma torniamo al quesito. Per il lavoro che dovevo fare ho risolto passando da
altre vie, grazie anche all'aiuto di Lapalissiano che mi ha suggerito come
creare un contatore senza scrivere una riga di codice.
La questione che ho posto rimane. Con le funzioni di ricerca e riferimento,
si riesce (almeno io riesco) a trovare il primo record che corrisponde ad un
criterio, ma non quelli successivi.
Su it.comp.aiuto, e' stato posto il quesito su come aggiornare
automaticamente l'ordinamento di una classifica di squadre di calcio.
Questo e' un altro caso in cui puo' capitare di avere due valori uguali
che fanno riferimento a due valori differenti (es. sia la juve che la roma
hanno 20
punti).
Sono riuscito a creare una funzione che intercetta il secondo valore uguale,
ma al di la' di quello non sono stato capace di andare.
In pratica bisognerebbe che ci fosse il modo di individuare due o piu'
valori uguali e di poter conoscere la loro posizione relativa (di riga o di
colonna a seconda delle esigenze) rispetto al valore uguale che li precede.
Con le funzioni gia' pronte di excel dubito che sia possibile, probabilmente
e' possibile col VBA, ma qui entriamo in un campo a me totalmente ignoto.
Ciao e grazie
Max

 Con le funzioni gia' pronte di excel dubito che sia possibile,
probabilmente e' possibile col VBA, ma qui entriamo in un campo a me
totalmente ignoto.
Ho riletto il tuo post originario e... improvvisamente mi e` apparso chiaro
cosa tu volessi ottenere! Almeno credo... ;-)
Esempio (migliorabile):
A1: CODICE
B1: AUTORE
C1: TITOLO
D1: TEMP
A2: 1
B2: PIPPO
C2: VITA SEGRETA DI TOPOLINO
D3: =SE($B2=$F$1;1;0)*RIF.RIGA($D2)
A3: 2
<e cosi` via, ricopiando in basso la formula in D3>
(Autore da cercare)
F1: PIPPO
(Zona risultati)
F2: 1
F3: 2
F4: 3
<tanti quanto il massimo numero di risultati vuoi visualizzare>
G2: =GRANDE($D$2:$D$65536;$F2)
<Ricopia in basso>
H2: =SE(VAL.ERRORE($G2);"";SE($G2>0;INDICE($B:$B;$G2);""))
<Ricopia in basso>
I2: =SE(VAL.ERRORE($G2);"";SE($G2>0;INDICE($C:$C;$G2);""))
<Ricopia in basso>
Ci siamo?


 Esempio (migliorabile):...
Che dire, sono senza parole.
Mi prendo solo qualche giorno per fare tutte le verifiche del caso e per
tentar di capire come agiscono le formule. Ma direi che hai centrato in
pieno il problema che ponevo.
Grazie mille.
Ciao, Max