PDA

View Full Version : Excel/Access formula x ricerca


nwinx
03-11-2006, 11:32
Ciao a tutti!
Ho bisogno di una formula di ricerca in excel: non credo sia complicatissimo perchè con MySql riuscirei a farla senza problemi.. in excel sto avendo difficoltà.

Il mio problema è questo:
- ho due file excel
- in ciascun file ho due colonne: Alias e nome. (chiamerò Alias1 e nome1 i campi del primo file, e alias2 e nome2 quelli del secondo)
- Io voglio che per ciascuna delle celle nome1, sia impostata una formula/macro che cerchi nel secondo file se alias1=alias2 (deve cercare ovviamente in tutta la colonna alias2 prima di trovare una corrispondenza). Se alias1=alias2, allora nome1=nome2 (più precisamente uguale alla cella della colonna nome2 nella riga in cui alias1=alias2)
La difficoltà che trovo è che il valore restituito deve essere quello sulla stessa riga dell'alias coincidente..

Spero sia chiaro e che possiate aiutarmi..
Grazie in anticipo!

ps: se pensate sia meglio in Access, potrei usare anche quello, ma avrei bisogno di informazioni più dettagliate perchè non lo so usare benissimo..

ciaps
03-11-2006, 12:18
non conosco le dimensioni in termini di record che intendi trattare ma in ogni caso con access è molto + facile! Apri access dal menù tabelle vai su file /carica dati esterni/ importa con quesot importi i dati dai file excell, ovviamente devi fare la prcedura per entrambi i file .Adesos clicca su strumenti /relazioni e definisci la chiave condivisa immagino alias1 alias2
Adesso vai sul menu query e crea una query (puoi utilizzare anche la creazione facilitata ) che contenga i dati da entrambe le tabelle , su visualizza ha i i tuoi dati .Se intendi cercare solo i dati dove alias1 = alias2 e nome1 = nome2 imposta la join su entrambi i campi

ciao

bimbumbam
03-11-2006, 13:59
Beh se non ti piace Access, allora usa MySql, salvi la tabella excel come file di database e poi ci usa sopra MySQL.
Cmq il procedimento che vuoi fare tu si fa con le formule
Se(;;)
Conta.se(;)
Indice(;;)
Confronta(;;)
=se(conta.se(IntAlias2;Alias1)>0;indice(IntAlias2;confronta(alias1;IntAlias2;0);0)
La formula va copiata in colonna a fianco della tabella degli alias1, per IntAlias2 intendo l'intervallo fissato (tipo $A$1:$A$400) degli alias2, per alias1 invece la singola cella..
Se vuoi anche i nomi a fianco dell'alias la formula resta uguale tranne che per il primo argomento della funzione indice() che sarà IntNomi2.
Ciao

nwinx
09-11-2006, 11:51
Ciao!
Non ho usato quella formula. Alla fine sono riuscito a risolvere il tutto iniziando a lavorare programmando le macro. Per chi fosse interessato, copio il codice qui sotto:


Sub assegnaNome()


For i = 2 To 683
For g = 2 To 5160
If Cells(i, 1) = Cells(g, 5) Then
Cells(i, 3) = Cells(g, 4)
Exit For
Else: Cells(i, 3) = Cells(i, 1)
End If
Next g

Next i

End Sub

bimbumbam
09-11-2006, 14:23
son contento che tu abbia messo tutto a posto, l'unico difetto della tua procedura è che devi rieseguire la macro ogni volta che fai degli aggiornamenti...
Non è sicuramente una tragedia, dipende solo dal numero di volte in cui devi fare la procedura.
Ciao