Skillbook Logo
foto profilo

Skill Factory

Lista post > Excel delle meraviglie Lezione 12 - Come creare procedure e funzioni con il Basic (VBA)

Excel delle meraviglie Lezione 12 - Come creare procedure e funzioni con il Basic (VBA)

Gino Visciano | Skill Factory - 21/09/2025 01:47:01 | in Tutorials

Durante la mia carriera professionale ho appreso, utilizzato e insegnato quasi tutti i linguaggi di programmazione. Tra questi sicuramente quello a cui sono rimasto più legato per tanti motivi, ma soprattutto per il ruolo che ha avuto nella storia dei linguaggi di programmazione è il Basic, il famoso linguaggio general purpose, perché era adatto a qualunque scopo.

Ricordo il Basic (Beginner's All-purpose Symbolic Instruction Code) per la sua semplicità e per il fatto che poteva essere usato anche da persone poco esperte.

Credo che sia importante far conoscere ai giovani dell'era digitale il Basic, perché ha rappresentato la storia dell'informatica e dei linguaggi di programmazione.

Oggi il Basic, nonostante l'età, è nato alla metà degli anni '60, è il linguaggio di programmazione usato in Excel per scrivere funzioni definite dagli utenti e procedure automatizzate, anche dette macro. Quindi, anche allo scopo di far conoscere il Basic, d'ora in avanti avvieremo un ciclo di lezioni, per imparare a creare in Excel funzioni e macro, utilizzando il linguaggio Basic.

Prima di procedere con questa lezione vi suggerisco di leggere prima la lezione: Excel delle meraviglie Lezione 8 - Come lavorare con le Macro.

Per poter scrivere codice Basic in Excel, dovete aggiungere la scheda Sviluppo, nel modo seguente:

1. Aprite Excel;
2. Cliccate sul menu File;
3. Selezionate Opzioni (in fondo al menu);
4. Nella finestra Opzioni di Excel, seleziona Personalizza barra multifunzione;
5. Nella lista di destra (Schede principali), mettete la spunta su Sviluppo;
6. Cliccate su OK.

 

Ora nella barra multifunzione di Excel apparirà la scheda Sviluppo, da cui potrete accedere all'Editor VBA (Visual Basic for Application) cliccando sull'icona Visual Basic a sinistra.

COME INIZIARE
Il Basic è un linguaggio  di programmazione molto semplice da apprendere e da usare; in Excel è utilissimo perché permette di automatizzare qualunque attività nel foglio di lavoro.

In Excel, con il Basic, potete sia creare procedure, sia creare funzioni; le procedure sono macro e si eseguono usando i tasti ALT+F8, mentre le funzioni restituiscono sempre un valore e vengono eseguite scrivendole nelle celle ("=NomeFunzione()") dove bisogna ottenere il risultato.

Dal punto di vista del Basic potete distinguere le procedure dalle funzioni perché hanno una struttura diversa:

' Procedura
Sub NomeProcedura()
     ' Inserire qui il codice Basic della procedura
End Sub

' Funzione
​Function NomeFunzione()
     ' Inserire qui il codice Basic della funzione
Function Sub

Ricordate che in Basic, le righe precedute da un apice ('), si usano per commentare il codice, quindi, sono considerate descrizioni o informazioni e non vengono eseguite.

Per creare le procedure e le funzioni dovete prima inserire un modulo utilizzando l'editor VBA (Visual Basic for Application), nel modo seguente:

1. Cliccate sull'icona Visual Basic che appare a sinistra della scheda Sviluppo oppure usate i tasti ALT+F11;
2. Quando appare l'editor VBA, cliccate sul menu inserisci e scegliete il comando Modulo:

3. Successivamente cliccate sul menu Visualizza e attivate la Finestra proprietà oppure usate il tasto F4:

 
4. Usando la finestra delle proprietà rinominate il modulo con un nuovo nome, ad esempio: "Esercizi":

5. Nel modulo "Esercizi", create prima la procedura e poi la funzione nel modo seguente:

6. Salvate utilizzando il menu File oppure usando i tasti CTRL+S.
Attenzione i file Excel che contengono macro vanno salvati con l'estensione xlsm:

COME ESEGUIRE LA PROCEDURA
Nella procedura il comando ActiveCell.Value = "Ciao Mondo", visualizza il messaggio nella cella in cui si trova il cursore al momento dell'esecuzione della macro.
Per eseguire la procedura o macro, chiudete prima l'editor VBA utilizzando il menu File oppure usando i tasti CTRL+Q; Una volta che siete nel foglio di lavoro, posizionate il cursore nella cella in cui volete scrivere il messaggio ed eseguite la macro nel modo seguente:
1. Attivate la scheda Sviluppo e cliccate sull'icona Macro oppure usate i tasti   ALT+F8;
2. Cliccate sulla macro ProceduraStampaCiaoMondo, ed eseguitela:

COME ESEGUIRE LA FUNZIONE
Le funzioni definite dall'utente, vengono eseguite quando si scrivono nelle celle un cui si vuole visualizzare il risultato.
Ricordate che il valore visualizzato nella cella in cui viene scritta la funzione è quello assegnato nel codice Basic alla variabile che ha lo stesso nome della funzione come mostra il codice seguente:

Function FunzioneStampaCiaoMondo()
    FunzioneStampaCiaoMondo = "Ciao Mondo"
End Function

Per eseguire la funzione  con il nome "FunzioneStampaCiaoMondo", posizionate il cursore nella cella in cui volete scrivere il messaggio, ad esempio quella B4 e scrivete nella cella il nome della funzione preceduto dal segno uguale (=), nel modo seguente:

=FunzioneStampaCiaoMondo()

Ricordate che il nome di una funzione termina sempre con una coppia di parentesi tonde.

L'immagine mostra come scrivere la funzione nella cella:

 

Attenzione per scegliere una funzione tra quelle suggerite, basta fare un doppio sul nome oppure premete il tasto tab.

COME VISUALIZZARE IL MESSAGGIO CON UNA FORMATTAZIONE
La procedura seguente visualizza il messaggio "Ciao Mondo", con le seguenti impostazioni:

Font: Times New Roman
Dimensione: 14
Stile: Bold (Grassetto)

' Procedura
Sub ProceduraStampaCiaoMondoFormattato()
    With ActiveCell
        .Value = "Ciao Mondo"
        .Font.Name = "Times New Roman"
        .Font.Size = 14
        .Font.Bold = True
    End With
End Sub

La struttura With Prefisso ... End With si usa in Basic per evitare di usare il prefisso ActiveCell prima di ogni proprietà inclusa nella struttura; la struttura With Prefisso ... End With è utile perché permette di abbreviare la scrittura del codice, altrimenti avremmo dovuto scrivere la procedura nel modo seguente:

Sub ProceduraStampaCiaoMondoFormattato()
        ActiveCell.Value = "Ciao Mondo"
        ActiveCell.Font.Name = "Times New Roman"
        ActiveCell.Font.Size = 14
        ActiveCell.Font.Bold = True
End Sub

Attenzione le funzioni possono solo visualizzare un valore o risultato nelle celle, non è possibile applicare formattazioni. Quindi, per formattare velocemente il risultato di una funzione dovete combinare l'uso di una funzione con quello di una procedura, come mostra l'esempio seguente:

Inserite la funzione seguente nella cella in cui stampare il messaggio.

Function FunzioneStampaCiaoMondo()
    FunzioneStampaCiaoMondo = "Ciao Mondo"
End Function

Successivamente selezionate la cella in cui appare il messaggio con ALT+F8 eseguite la procedura seguente:

Sub ProceduraFormattaTesto()
    With ActiveCell
        .Font.Name = "Times New Roman"
        .Font.Size = 14
        .Font.Bold = True
    End With
End Sub

 
COME CREARE UNA PROCEDURA O UNA FUNZIONE CHE OGNI VOLTA VISUALIZZA UN MESSAGGIO DIVERSO
Per creare una procedura che ogni volta che viene eseguita visualizza nella cella selezionata un messaggio diverso, dovete usare il comando:
 
messaggio = InputBox("Inserisci il messaggio da stampare", "Messaggio input")
 
Questo comando permette, d'inserire da tastiera il messaggio da stampare e lo assegna alla variabile di tipo stringa (String) messaggio.
In Basic le variabili prima di poter essere usate vanno dichiarate con il comando Dim, indicando il nome e il tipo di variabile:
 
Dim messaggio As String
 
Di seguito la procedura completa:
 
' Procedura
Sub ProceduraStampaMessaggioDaInput()
    Dim messaggio As String
    messaggio = InputBox("Inserisci il messaggio da stampare", "Messaggio input")
    If messaggio <> "" Then
        With ActiveCell
            .Value = messaggio
            .Font.Name = "Times New Roman"
            .Font.Size = 14
            .Font.Bold = True
        End With
    Else
        MsgBox "Nessun messaggio inserito.", vbExclamation
    End If
End Sub
 
Le funzioni non permettono l'inserimento di dati da tastiera, ma i valori della funzione possono essere passati come argomenti, come mostra l'esempio seguente:
 
' Funzione
Function FunzioneStampaOgniVoltaMessaggioDiverso(messaggio as String)
      FunzioneStampaOgniVoltaMessaggioDiverso=messaggio
End Function           
 
Per eseguire la funzione basterà scrivere nella cella dove visualizzare il messaggio fornito come argomento il testo seguente:
 
=FunzioneStampaOgniVoltaMessaggioDiverso("Tanti saluti a tutti")
 
Ricordate che le stringhe (sequenze di caratteri) vanno sempre scritte tra doppi apici.
 
COME CREARE UNA FUNZIONE CHE SCORPORA UNA PERCENTUALE INDICATA DA UN VALORE
Per creare una funzione che scorpora una percentuale indicata da un valore, dovete prima di tutto indicare gli argomenti della funzione: valoreTotale As Double, percentuale As Integer.
Il tipo Double indica che le variabili sono di tipo decimale, mentre Il tipo Integer indica che le variabili sono di tipo intero.
 
Di seguito la funzione completa:
 
Function ScorporaPercentuale(valoreTotale As Double, percentuale As Integer) As Double
    ' Calcola il valore netto scorporando la percentuale indicata
    ' percentuale deve essere indicata come valore numerico (es. 22 per 22%)
    ScorporaPercentuale = valoreTotale / (1 + percentuale / 100)
End Function
 
Per questa funzione, dopo gli argomenti della funzione, è stato indicato anche il tipo restituito: As Double.
 
Anche se è facoltativo, dichiarare esplicitamente il tipo di ritorno di una funzione è considerata buona pratica di programmazione perché:
• Rende il codice più chiaro e leggibile per chi lo legge.
• Permette al compilatore di identificare errori di tipo in fase di sviluppo.
• Migliora le prestazioni, perché VBA conosce il tipo di dato esatto da gestire.
 
Per provare la funzione facciamo alcuni esempi:
 
Esempio 1
Scorporare il 22% dall' importo:  €976,00.
 
Soluzione
Per ottenere il risultato posizionatevi in una cella del foglio di lavoro e scrivete la funzione:
=ScorporaPercentuale(976,00; 22)
 
Il risultato è €800,00.
 
Esempio 2
Creare una Scheda di fatturazione con le seguenti informazioni:
Cliente:
Numero fattura:
Data fattura:
Importo:
Imponibile:
Imposta:
Aliquota:
Data scadenza:
Stato:
 
Soluzione
In A1 inserire il titolo della scheda e da A2 in poi tutte le altre etichette, come mostra l'Immagine seguente:
 
 
I valori che servono alla funzione si trovano nelle celle B5 e B8.
 
Il valore sorporato nel nostro caso corrisponde all'Imponibile, quindi nella cella B6, scrivete la funzione seguente:
=ScorporaPercentuale(B5;B8)
 
Successivamente, nella cella B7, scrivete la formula:
=B5-B6
 
per ottenere l'Imposta.
 
Adesso compilate la scheda e verificate se i risulati sono esatti, come mostra l'immagine seguente:
 
 
 
COME CREARE UNA FUNZIONE CHE AUTOMATICAMENTE AGGIORNA LO STATO DELLA SCHEDA DI FATTURAZIONE
In questo esempio vediamo come si creare una funzione definita dall'utente, che aggiorna automaticamente lo stato della scheda di fatturazione.
La funzione restituirà il messaggio "In scadenza", se la data odierna sarà minore della data di scadenza, restituirà il messaggio "Scaduta", se la data odierna sarà uguale o maggiore alla data di scadenza, altrimenti non visualizzerà nulla, ovvero restituirà il messaggio "". 
Per creare la funzione useremo la struttura  condizionale IF ... THEN ... ELSE (SE ... ALTRIMENTI ... ALLORA) per decidere il messaggio da visualizzare.
Per ottenere la data odierna useremo la funzione Date(), indicata nel codice con il comando Date.
Come abbiamo già visto precedentemente in Basic le variabili prima di essere usate devono essere dichiarate con il comando Dim. I tipi di variabili più comuni sono String, Integer e Double, ma possono essere usati anche altri tipi, come Range, che indica le coordinate di una cella o di una selezione di celle e Variant, che spesso si usa per indicare qualunque tipo d'informazione.
Il Tipo Variant può essere indicato quando usiamo un tipo di dato speciale oppure non conosciamo il tipo di informazione che verrà memorizzata nella variabile.
 
Di seguito la funzione completa:

Function ControllaScadenza() As String
    Dim dataFattura As Variant
    Dim rng As Range
    
    Set rng = Application.Caller ' La cella da cui è stata chiamata la funzione
    dataFattura = rng.Offset(-1, 0).Value 'Legge il valore della cella precedente a quella dove è stata chiamata la funzione
    ' (-1,0) legge il valore nella cella precedente (-1), della stessa colonna (0) a quella dove è stata chiamata la funzione
    If IsDate(dataFattura) Then ' La funzione isDate controlla se il valore letto è una data
        If Date >= dataFattura Then
            ControllaScadenza = "Scaduta" 'Data odierna >= Data scadenza
        Else
            ControllaScadenza = "In scadenza" 'Data odierna < Data scadenza

        End If
    Else
        ControllaScadenza = "" 'Data scadenza non presente oppure non corretta 
    End If
End Function

Per completare l'esempio, inserite la funzione nella cella B10 della Scheda di fatturazione e testatela inserendo nella cella B9 date diverse o nessuna data.

 


Nella prossima lezione vedremo le principali strutture di controllo del Basic e scriveremo semplici applicazioni con il linguaggio VBA di Excel.


<< Lezione precedente | Vai alla prima lezione


T U T O R I A L S    S U G G E R I T I


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

 

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

 

 

 

 

 
Share Button
TOP