Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

ricerca in un file elenco di excel

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

ricerca in un file elenco di excel

Postdi dado » 16/06/05 19:07

Ho un file di excel che contiene un elenco di voci con vari dettagli.
Ogni riga riporta una voce e nelle varie colonne sono riportati i dettagli.
Quello che mi chiedevo è se esiste un modo per far sì che quando vado ad inserire una nuova voce, mi venga detto se è già stata inserita una voce analoga con gli stessi dettagli (senza dover andare io a fare una ricerca).
Mi serve una macro?
Grazie.

House: "Vede, tutti pensano che sia un paziente a causa del bastone"
Wilson: "Allora perchè non indossa un camice bianco come tutti noi?"
House: "Perchè altrimenti pensano che sia un medico".
Avatar utente
dado
Utente Senior
 
Post: 16208
Iscritto il: 21/08/01 01:00
Località: La Città dei Sette Assedi

Sponsor
 

Re: ricerca in un file elenco di excel

Postdi piercing » 16/06/05 20:14

dado ha scritto:Ho un file di excel che contiene un elenco di voci con vari dettagli.
Ogni riga riporta una voce e nelle varie colonne sono riportati i dettagli.
Quello che mi chiedevo è se esiste un modo per far sì che quando vado ad inserire una nuova voce, mi venga detto se è già stata inserita una voce analoga con gli stessi dettagli (senza dover andare io a fare una ricerca).
Mi serve una macro?
Grazie.


Ti serve un prete...

specifica il concetto di "analoga" cmq...
Avatar utente
piercing
Moderatore
 
Post: 7569
Iscritto il: 10/04/02 10:34
Località: Roma

Postdi dado » 16/06/05 20:27

Provo a fare un piccolo esempio:

Codice: Seleziona tutto
          NOME  |  DATA  | CODICE ID.  |  EURO  |  SCADENZA
          pippo  01/06      1            100,00   30/06
          pluto  04/06     2            30,00     31/07
          minnie 10/06      3            800,00    01/07
.....

          goku   18/06     20            2500,00   18/08



Aggiungendo una riga alla tabella con scritto sempre qcosa del genere, ad es. la riga 4, mi servirebbe qcosa che mentre inserisco (o anche dopo aver inserito la nuova riga), mi segnali eventualmente se avevo già inserito i dati della riga X (4 nell'esempio sopra) in una delle righe precedenti.

House: "Vede, tutti pensano che sia un paziente a causa del bastone"
Wilson: "Allora perchè non indossa un camice bianco come tutti noi?"
House: "Perchè altrimenti pensano che sia un medico".
Avatar utente
dado
Utente Senior
 
Post: 16208
Iscritto il: 21/08/01 01:00
Località: La Città dei Sette Assedi

Postdi maxmula » 17/06/05 00:12

Se accetti un piccolo rallentamento di Excel ognio volta che selezioni una cella del foglio, puoi farlo con Visual Basic.

Hai bisogno di:
1) Definire a priori l'area che dovrà "ospitare" la tabella (tieniti un buon margine di righe vuote per i futuri inserimenti). Qui supponiamo che le righe che ci interessino siano tra la 6 e la 43; la nostra tabella inizia in colonna C
Cella C6 = "Roma"
Cella C7 = "Milano"
Cella C8 = "Venezia"
Cella C9 = "Genova"

2) Utilizzare 4 celle come "appoggio" (nell'esempio: H1-H2 e K1-K2). Qui si andranno a salvare:
- colonna della cella attualmente selezionata
- riga della medesima cella
- colonna della cella precedentemente selezionata
- riga della medesima

3) Apri l'editor di VBA (ALT+F11), visualizza la Gestione Progetti (CTRL+R) e nell'albero fai doppio clic sul foglio che ospita la tabella (qui supponiamo si chiami "Foglio1").
In sostanza, andrai a riprogrammare l'evento SelectionChange per il foglio, ovvero: questo programma partirà ogni volta che cambierà la selezione: se l'ultima cella che avevi selezionato era nella colonna da controllare, verificherà se ci sono duplicati di quello che avevi scritto
La macro da utilizzare è grosso modo questa:

Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Range("k1").FormulaR1C1 = Range("h1").Value 'Salva la riga della vecchia cella
    Range("k2").FormulaR1C1 = Range("h2").Value'Salva la colonna della vecchia cella
    Range("h1").FormulaR1C1 = ActiveCell.Row  'Scrive la riga della cella attuale
    Range("h2").FormulaR1C1 = ActiveCell.Column 'Scrive la colonna della cella attuale

    If Range("k2").Value = 3 Then    'Se l'ultima cella modificata era nella colonna da controllare...
        ULTIMA_RIGA = Range("K1").Value
        ULTIMA_COLONNA = Range("K2").Value
        DIGITATO = Cells(ULTIMA_RIGA, ULTIMA_COLONNA).Value
        QUANTE_RICORRENZE = Application.WorksheetFunction.CountIf(Range("c6:C43"), DIGITATO)     '...andiamo a vedere se ci sono duplicati
        If QUANTE_RICORRENZE > 1 Then   'Se compare + di 1 volta è duplicata!
            W = MsgBox("Valore duplicato!", vbOKOnly + vbExclamation, "ATTENZIONE")
        End If
       
    End If
End Sub


Se ora scrivi "Milano" nella cella C10, dovrebbe uscirti un messaggio di avviso (in quanto è già nella lista).

Naturalmente è solo un'idea, e l'algoritmo si presta a numerosi miglioramenti...

Ciao,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Postdi Dylan666 » 17/06/05 01:28

Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi archimede » 17/06/05 08:37

Seleziona le celle da controllare (supponiamo da A1 a A30). Quindi:

Dati --> Convalida --> Personalizzato

e come formula =CONTA.SE($A$1:$A$30;A1)=1

Puoi anche divertirti a personalizzare il messaggio di errore.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova


Torna a Programmazione


Topic correlati a "ricerca in un file elenco di excel":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti