Variabili, Vettori, Costanti, e Tipi di Dati. - dal 04/09/04 pagina vista: volte L'argomento Variabili è piuttosto ampio, è qui non verrà analizzato tutto. Lo scopo dell'articolo è solo quello di avvicinare il lettore ai concetti di base. Per analisi approfondite e più complete sarà necessario leggersi la guida in linea, che su questo argomento è ben descritta e ampia, oppure acquistatevi un libro sul VBA. (vedi pagina Libri&Link). Molti non hanno ben chiaro il concetto di Variabile, Vettore, Costante: molto, ma molto semplicemente possiamo dire:
Un esempio: vogliamo reperire il valore che sarà in una determinata cella. In questa cella abbiamo un totale numeri che potrà cambiare al variare anche di un solo numero: abbiamo bisogno di "prendere" questo totale per svolgere dei calcoli. Ma il totale può cambiare in qualsiasi momento per effetto di variazioni dei numeri (quindi non è un valore Costante nel tempo). Useremo quindi una Variabile, quindi un nome, che rappresenti il valore di "totale" qualunque sia questo valore, ed avremo:
Altro esempio: vogliamo reperire in numero di righe (ma potrà essere anche di colonne) occupate da dati. Poichè potremo aggiungere dati a piacere, il numero di righe varierà in continuazione. Avremo bisogno di sapere da quante righe è formato il nostro elenco per assegnare questo numero ad un Ciclo For..Next, come limite superiore del ciclo. Useremo anche qui una Variabile, in questo caso una lettera, che diventi il Vettore del numero di righe, ed avremo:
in questo esempio abbiamo usato un'altra Variabile, identificata dalla lettera N (ma poteva essere anche una parola: "pippo", il risultato di avere un Vettore di un dato variabile, (che cambia di valore), sarebbe stato lo stesso). infatti anche il valore che N avrà nel ciclo, varia di una unità ad ogni ciclo (Next), ed avevamo bisogno quindi di usare una Variabile. Riassumendo: una Variabile è qualcosa (un nome o una lettera) che rappresenta (diventa il Vettore di) un valore che cambia o può cambiare. Un pò più chiaro adesso? Spero proprio di si.
Secondo enunciato: una Variabile può portare (essere il Vettore di) una Costante, Esempio:
Si dirà: a che scopo usare una Variabile quando si può ottenere lo stesso risultato scrivendo direttamente l'istruzione:
intanto un motivo è rappresentato dalla comodità di usare un nome che può essere molto breve, e quindi dalla possibilità di usare istruzioni lunghe, rappresentandole anche con una sola lettera. Poi nell'esempio sopra, per evitare risultati diversi dai desiderati: infatti nei conteggi non bisogna dimenticare che le operazioni tra numeri, vengono svolte seguendo una priorità: prima vengono svolte le operazioni tra parentesi, e quindi poi le divisioni, poi le moltiplicazioni, infine le somme e le sottrazioni. E non sempre istruzioni su una unica riga sortono i risultati giusti, poi, condizione più importate, con una Variabile possiamo specificare il "Tipo di dati" (che vediamo più avanti) che la variabile rappresenta . Ma verifichiamo ancora l'importanza nella priorità delle operazioni e l'influenza delle parentesi nello svolgimento dei calcoli: supponiamo di voler ottenere l'importo dello sconto di una cifra: moltiplichiamo due valori (100 x 5), al risultato toglieremo 100, e sulla differenza (400) applichiamo il 20%, ottenendo 80, giusto? vediamo con queste tre istruzioni assegnate e variabili cosa otteniamo:
Sembra abbia deviato dall'argomento Variabili, ma usando le variabili possiamo unire gruppi di calcoli per ottenere i nostri risultati, specialmente se alcuni gruppi di calcolo sono ripetitivi: basterà infatti utilizzare il nome della variabile anzichè riscrivere tutte le operazioni: in A1 avremo 100, in B1 avremo 5, in C1 avremo 100, e in D1 otterremo 80
Variabili : Tipi di dati . Avete visto che sul foglio di lavoro, quando dobbiamo scegliere il "Formato Celle", ci si presenta una finestra in cui potremo selezionare se la cella dovrà contenere "numeri", o "date", oppure "orari", o ancora "testo", "valuta", ecc. ecc. fino al "personalizzato" ? Bene, quello che noi sceglieremo altro non è che il "Tipo di dati" che la cella dovrà contenere. Il motivo è semplice: se informiamo Excel su ciò che una cella conterrà, lui sarà in grado di gestirlo come tale, ed impedirà per esempio di moltiplicare un numero per un testo, oppure di scrivere un numero intero che inizi per zero, ecc. ecc. Se però dimentichiamo di impostare un "Formato cella" specifico, Excel comunque lo interpreta come "Generale", cioè un qualcosa che non è definito, e che potrà essere testo oppure numero, indifferentemente (anche se con ovvie limitazioni nella gestione di questi dati non definiti come "Tipo"). Come avviene sul foglio di lavoro, lo stesso accade in Vba : in assenza della definizione del tipo di dati, ogni variabile viene considerata di Tipo Variant (simile a Generale, per intenderci). Poichè anche in vba avremo bisogno di "definire" comunque il "Tipo di dato" che la Variabile rappresenta, (quindi testo, numero intero, numero con decimali, data, ora, ecc.ecc.) potremo avvalerci di due metodi:
A: per dimensionare una variabile viene in genere utilizzata un'istruzione Dim .Questa istruzione di dichiarazione può essere posizionata:
In sostituzione dell'istruzione Dim, quando si voglia rendere visibile la variabile in tutto il progetto (cioè in ogni e qualsiasi modulo Standard o modulo Foglio) potremo usare l'istruzione Public posizionandola nella sezione Dichiarazioni di un modulo. B : Abbiamo detto che in mancanza del dimensionamento con definizione del tipo di dati, ma anche dimensionando SENZA però definire il tipo di dati, una variabile viene considerata di tipo Variant (potrà essere quindi dati numerici, stringhe o date). Ma spesso abbiamo bisogno di far capire al codice che una certa variabile è il vettore di un tipo preciso di dato, ecco che possiamo usare la Funzione di conversione del tipo di dati che si usa applicando una Funzione di Visual Basic e quelle legate alla definizione del tipo di dati si riassumono in questa tabella (potete trovarle tutte nella guida in linea)
Bene, ora che le abbiamo viste (le Funzioni di conversione del tipo), come le utiliziamo? Semplicemente usando la variabile come argomento della funzione. Facciamo qualche esempio riprendendo quelli sopra:
L'esempio con la InputBox ci porta ad un'altra considerazione: quando si "prendono" dati attraverso le "Finestre di Dialogo" (InputBox), i dati vengono visti come Stringhe (quindi testo) anche se si inserisce un numero. In alcuni casi questo è ininfluente ai fini di istruzioni a valle della InputBox, molto spesso invece è opportuno usare una Funzione di conversione del tipo di dato per definire ciò che abbiamo reperito con la inputbox, specialmente se trattiamo numeri che devono essere usati in operazioni e calcoli, oppure date. Ma anche possiamo usare il dimensionamento della variabile definendo il tipo di dato . Vediamo due esempi: supponiamo che nella InputBox noi scriveremo una data:
Se non avessimo usato definire il tipo di dati, 25/12/03 sarebbe stata passata come stringa con tutte le conseguenze del caso. Esiste un'interessante Funzione che può servire a riconoscere che capperi di dato stiamo passando con una variabile impostata tramite InputBox, ed eventualmente provvedere a definire il tipo di dato giusto. La funzione è VarType che restituisce un numero che identifica il tipo di dato reperito tramite la inputbox : se il numero non è quello giusto che noi vogliamo, correremo ai ripari. Questa è una semplice routine che ci serve ad ottenere il umero, e sotto vediamo una tabella con i significati:
Vedrete che se non si definisce il tipo di dati, qualunque cosa si scriva nella InputBox, il valore letto nel messaggio sarà sempre 8, cioè una stringa. Se invece usiamo definire il tipo di dati, come negli esempi Sub Verifica1() o Sub Verifica2() otterremo 7, che sarà quello giusto, trattandosi di una data. Ovviamente definiremo il tipo di dati giusto che ci servirà di volta in volta. Mi sembra di non avere altro da dire, se non che, se non sarò stato comprensibile, non so proprio in quale altra maniera dirlo. Buon lavoro. prelevato sul sito www.ennius.altervista.org |