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