Loading...

WizBlog Logo WizBlog
Windows > Software > Funzioni in VBA: Differenze fra Function e Sub e come si usano

Excel

Funzioni

Procedure

VBA

Funzioni in VBA: Differenze fra Function e Sub e come si usano

Da Redazione

Maggio 05, 2015

Funzioni in VBA: Differenze fra Function e Sub e come si usano

Ora dovreste sapere come accedere all’editor VBA da Excel e come definire una variabile, e possiamo passare al livello successivo, scrivere una funzione.

Intanto definiamo due tipi di funzioni, quelle che restituiscono valori e quelle che invece servono solo ad inizializzare una determinata variabile o eseguire una certa operazione. Ovvero:

  • Function: Che sono funzioni da cui otteniamo un risultato
  • Sub: Funzioni che non restituiscono valori in output, dette anche dette procedure

Queste possono essere a loro volta con parametri o senza parametri, ma entriamo nel dettaglio della sintassi e addentriamoci nel problema VBA descrivendo intanto il problema che vogliamo risolvere:

Differenze fra Function e Sub

Date due celle, la cella A1 e la cella A2, con due valori numerici (es: A1 = 10 e A2 = 20), creiamo una funzione DIVISIONE che fa la visione del valore di A1 su quello di A2

Mostriamo intanto la sintassi che scriveremo sul foglio VBA (e che potrete copiare ed incollare) e la descriviamo usando i commenti, che vengono scritti mettendo ad inizio riga un apice ‘ e che qui per comodità scriveremo in corsivo:

Function DIVISIONE()             'Definiamo la funzione che chiamiamo DIVISIONE</pre>
<pre>Dim A1 As Integer, B1 As Integer     'Definiamo due variabili locali A1 e A2 come intere naturali</pre>
<pre>Dim Risultato As Double              'Definiamo risultato, avremmo potuto definirlo nella riga prima</pre>
<pre>A1 = Worksheets("Foglio1").Cells(1,1)</pre>
<pre>'A1 sarà uguale al risultato della Cella in posizione 1,1 (A1) del foglio Foglio1</pre>
<pre>B1 = Worksheets("Foglio1").Cells(1,2)</pre>
<pre>'B1 sarà uguale al risultato della Cella in posizione riga 1 colonna 2, quindi B1, del Foglio1</pre>
<pre>Risultato = A1 / B1     'Risultato sarà il quoziente fra A1 e B1</pre>
<pre>DIVISIONE = Risultato   'Diciamo che il risultato della funz DIVISIONE è la variabile Risultato</pre>
<pre>End Function            'Chiudiamo la funzione, sintassi sempre necessaria a fine funzione</pre>
<pre>

Adesso salvate tutto, ricordandovi di salvare come documento con macro (il file dovrà avere estensione .xlsm)

Per provare DIVISIONE adesso andate su Excel e in una cella a caso scrivete =DIVISIONE()

Otterrete così il risultato del quoziente fra A1 e B1

Ma uno dei vantaggi della programmazione, rispetto il semplice uso di calcoli matematici tramite celle su Excel, è quello di poterci permettere di variare sempre i passi per arrivare a soluzione, e in questo caso vi illustreremo come anche sfruttando un caso molto semplice come questo possiamo illustrarvi l’uso congiunto di una Function e di una Sub.

function e sub 2
Le Sub, come abbiamo detto, sono procedure che servono in pratica a racchiudere una parte di codice che vorremmo poi in seguito richiamare, senza doverla riscrivere sempre.

Possiamo in questo caso sviluppare il problema come segue, creando una SUB che ha lo scopo soltanto di leggere i dati nelle celle, e una FUNCTION che serve solo a eseguire il quoziente dei valori delle celle. Ovviamente in questo caso non ne avremmo avuto bisogno (come fatto precedentemente), ma ci permette di dimostrare nella pratica come funziona la programmazione su VBA:

Dim A1 As Integer, B1 As Integer     'Definiamo due variabili globali A1 e B1 come intere naturali</pre>
<pre>Sub LeggiDati()          'Definiamo la procedura LeggiDati che serve solo a leggere i valori</pre>
<pre>A1 = Worksheets("Foglio1").Cells(1, 1)</pre>
<pre>'A1 sarà uguale al risultato della Cella in posizione 1,1 (A1) del foglio Foglio1</pre>
<pre>B1 = Worksheets("Foglio1").Cells(1, 2)</pre>
<pre>'B1 sarà uguale al risultato della Cella in posizione riga 1 colonna 2, quindi B1, del Foglio1</pre>
<pre>End Sub           'Chiudiamo la procedura, sintassi sempre necessaria a fine procedura</pre>
<pre>Function DIVISIONE()           'Definiamo la funzione che chiamiamo DIVISIONE</pre>
<pre>Dim Risultato As Double        'Definiamo risultato come decimale, avremmo potuto definirlo nella riga prima</pre>
<pre>Call LeggiDati    'Richiamiamo la procedura LeggiDati, e ci evitiamo di riscrivere il codice</pre>
<pre>Risultato = A1 / B1            'Risultato sarà il quoziente fra A1 e B1</pre>
<pre>DIVISIONE = Risultato    'Diciamo che il risultato della funz DIVISIONE è la variabile Risultato</pre>
<pre>End Function          'Chiudiamo la funzione, sintassi sempre necessaria a fine funzione</pre>
<pre>

Vedete quindi come è possibile richiamare una SUB con il comando Call, mentre nel caso di una funzione dobbiamo richiamarla sfruttando una variabile a cui verrà assegnato il risultato della funzione, con una sintassi del tipo:

risultato = funzione (parametri)

Adesso possiamo andare avanti definendo cosa sono i parametri di una funzione

Se invece di recuperare i dati in input dal foglio di calcolo avessimo già questi dati da calcoli precedenti, potremmo passarli direttamente alla funzione come parametri. Un esempio può semplificarvi la comprensione:

Dim A1 As Integer, B1 As Integer, Risultato As Double</pre>
<pre>'Definiamo tre variabili globali A1 e B1 come intere naturali e Risultato come decimale</pre>
<pre>Function Divisione()</pre>
<pre>A1 = Worksheets("Foglio1").Cells(1, 1)</pre>
<pre>B1 = Worksheets("Foglio1").Cells(1, 2)</pre>
<pre>Risultato = Operazione(A1, B1)</pre>
<pre>'Risultato sarà uguale al quoziente ottenuto come output da Operazione a cui abbiamo passato i parametri A1,B1</pre>
<pre>Divisione = Risultato 'output della funzione Divisione</pre>
<pre>End Function</pre>
<pre>Function Operazione(Var1 As Integer, Var2 As Integer)</pre>
<pre>'Definiamo la funzione Operazione con due parametri, Var1 e Var2, interi naturali</pre>
<pre>Dim Quoziente As Double</pre>
<pre>Quoziente = Var1 / Var2</pre>
<pre>Operazione = Quoziente</pre>
<pre>End Function

Così abbiamo visto le differenze fra funzioni e procedure, come si definiscono, come si richiama una procedura e come è strutturata una funzione di tipo parametrica.

Proseguiamo nel prossimo passo illustrando le condizioni selettive IF e gli operatori logici

Redazione Avatar

Redazione

Condividi con un amico