Evitare Ripetizioni (nell'inserimento di dati in una tabella) (14/01/03) Praticamente si tratta di un "Controllo inserimento dati". Un'altra dimostrazione che tramite Vba, si possono comporre istruzioni che mirino allo stesso scopo, variando completamente il modo di controllo. Questa volta ci occuperemo della trasposizione in codice di una funzione del foglio di lavoro : la funzione =CONTA.SE Questa funzione, l'abbiamo già vista impiegare in " Usare Convalida (2)" , nella sezione "formule". L' istruzione controlla se le celle di un determinato Range contengono lo stesso valore che si troverà in una cella (che useremo come vettore per la ricerca), se tale vettore sarà trovato sarà pari a 1, e la formula riscontra VERO, altrimenti restituisce FALSO. L'istruzione andrebbe compilata così e verrebbe posta in una cella, per esempio la C1: =CONTA.SE(A1:A100;B1)=1 e dice praticamente: controlla se il valore che è in B1 è presente nel range che va da A1 a A100, se lo trovi scrivi (in C1) VERO, altrimenti scrivi FALSO. Questo potrebbe essere un modo alternativo per il controllo dell'inserimento dati, peraltro ottenibile usando la "Convalida Dati" di Excel. In genere questi controlli si eseguono quando si debbano introdurre dati "univoci", come un numero di fattura, oppure un codice articolo. Volendo quindi applicare in Vba questa funzione, faremo un esempio: supponiamo di avere una colonna dove inseriremo il numero di fattura, e lo posizioniamo nella colonna A, a partire dalla prima cella. Seguendo la falsariga della funzione sopracitata, avremo bisogno di una cella che funzioni da vettore, e di una cella dove "alloggiare" la formula stessa. Visto che ci apprestiamo ad usare del codice, perchè non usare una finestra di introduzione dati, una InputBox, che renderà un pò più "professionale" il nostro lavoro? Avremo bisogno anche di "convertire" il risultato della funzione (VERO, FALSO) in un istruzione che ci consenta di annullare la scrittura se il numero fattura che vorremo inserire esiste già, mentre vorremo che il numero stesso venga scritto, se non presente, e venga scritto nella riga successiva all'ultimo numero presente nel range previsto. Ecco quindi una routine che ci consente di fare quanto detto (in verde sono le spiegazioni):
E questa è la variante con la descrizione nel messaggio della InputBox dell'ultimo numero presente, in modo che si sappia comunque qual'è l'ultimo numero inserito (non ripeto le spiegazioni già fornite nella routine sopra):
|