🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi su Macro VBA in Excel

Codegrind TeamAug 18 2024

Impara a creare macro VBA in Excel con una serie di esercizi pratici. Scopri come automatizzare attività ripetitive e personalizzare le funzionalità di Excel con il codice VBA.

Esercizi Semplici

Esercizio 1: Creare una Macro Semplice

Crea una macro VBA in Excel che seleziona un intervallo di celle e cambia il colore di sfondo a giallo.

Istruzioni:

  1. Apri Excel e premi Alt + F11 per aprire l’Editor VBA.
  2. Nella finestra di progetto, inserisci un nuovo modulo (Inserisci > Modulo).
  3. Scrivi il seguente codice VBA:
Sub CambiaColoreCelle()
    Range("A1:B10").Interior.Color = vbYellow
End Sub
  1. Torna a Excel, vai su Sviluppo > Macro, seleziona CambiaColoreCelle e clicca Esegui.
  2. Verifica che le celle da A1 a B10 siano colorate di giallo.
1. Apri l'Editor VBA (Alt + F11) e inserisci un nuovo modulo.
2. Inserisci il codice per cambiare il colore di sfondo.
3. Esegui la macro e verifica il risultato.

Esercizio 2: Creare una Macro per Riempire Dati

Crea una macro VBA che inserisce automaticamente la data odierna nella cella A1 e i giorni successivi nelle celle sottostanti.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub InserisciDate()
    Dim i As Integer
    For i = 0 To 9
        Cells(i + 1, 1).Value = Date + i
    Next i
End Sub
  1. Torna a Excel, esegui la macro InserisciDate.
  2. Verifica che la cella A1 contenga la data odierna e che le celle sotto di essa contengano le date successive.
1. Inserisci il codice per riempire le date nelle celle.
2. Esegui la macro e verifica il risultato.

Esercizio 3: Creare una Macro per Copiare e Incollare Dati

Crea una macro VBA che copia i dati dall'intervallo A1:B10 e li incolla in C1:D10.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub CopiaIncollaDati()
    Range("A1:B10").Copy Destination:=Range("C1")
End Sub
  1. Torna a Excel, esegui la macro CopiaIncollaDati.
  2. Verifica che i dati siano stati copiati correttamente da A1:B10 a C1:D10.
1. Inserisci il codice per copiare e incollare i dati.
2. Esegui la macro e verifica il risultato.

Esercizio 4: Creare una Macro con Input da Utente

Crea una macro VBA che chiede all'utente di inserire un numero, quindi riempie la colonna A con quella quantità di numeri consecutivi a partire da 1.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub RiempieNumeri()
    Dim num As Integer
    num = InputBox("Quanti numeri vuoi inserire?")

    For i = 1 To num
        Cells(i, 1).Value = i
    Next i
End Sub
  1. Torna a Excel, esegui la macro RiempieNumeri.
  2. Inserisci un numero quando richiesto e verifica che la colonna A sia riempita con quella quantità di numeri.
1. Inserisci il codice per chiedere all'utente un input e riempire le celle.
2. Esegui la macro e verifica il risultato.

Esercizio 5: Creare una Macro per Filtrare Dati

Crea una macro VBA che filtra i dati in una tabella per mostrare solo le righe dove la colonna B è maggiore di 50.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub FiltraDati()
    Range("A1:C10").AutoFilter Field:=2, Criteria1:=">50"
End Sub
  1. Torna a Excel, esegui la macro FiltraDati.
  2. Verifica che i dati siano filtrati correttamente mostrando solo le righe dove il valore in colonna B è maggiore di 50.
1. Inserisci il codice per filtrare i dati.
2. Esegui la macro e verifica il risultato.

Esercizi Avanzati

Esercizio 6: Creare una Macro per Ordinare Dati

Crea una macro VBA che ordina i dati in una tabella in base ai valori della colonna B in ordine decrescente.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub OrdinaDati()
    Range("A1:C10").Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlYes
End Sub
  1. Torna a Excel, esegui la macro OrdinaDati.
  2. Verifica che i dati siano ordinati correttamente in base ai valori della colonna B.
1. Inserisci il codice per ordinare i dati.
2. Esegui la macro e verifica il risultato.

Esercizio 7: Creare una Macro per Inviare Email

Crea una macro VBA che invia un'email tramite Outlook, includendo l'intervallo di celle A1:B10 come tabella nell'email.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub InviaEmail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    strbody = "Ciao," & vbNewLine & vbNewLine & _
              "Trovi in allegato la tabella con i dati." & vbNewLine & vbNewLine & _
              "Cordiali saluti."

    On Error Resume Next
    With OutMail
        .To = "email@example.com"
        .CC = ""
        .BCC = ""
        .Subject = "Dati Importanti"
        .HTMLBody = strbody & RangetoHTML(Range("A1:B10"))
        .Send
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Function RangetoHTML(rng As Range)
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook

    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).

PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
    End With

    With TempWB.PublishObjects.Add(xlSourceRange, TempFile, _
         TempWB.Sheets(1).Name, TempWB.Sheets(1).UsedRange.Address)
        .HtmlType = xlHtmlStatic
        .Publish (True)
    End With

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")

    TempWB.Close savechanges:=False

    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function
  1. Torna a Excel, esegui la macro InviaEmail.
  2. Verifica che l’email venga inviata con la tabella inclusa.
1. Inserisci il codice per inviare un'email tramite Outlook.
2. Esegui la macro e verifica che l'email sia stata inviata correttamente.

Esercizio 8: Creare una Macro con Ciclo For Each

Crea una macro VBA che scorre tutte le celle dell'intervallo A1:A10 e evidenzia in rosso quelle con un valore maggiore di 100.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA:
Sub EvidenziaCelle()
    Dim cella As Range
    For Each cella In Range("A1:A10")
        If cella.Value > 100 Then
            cella.Interior.Color = vbRed
        End If
    Next cella
End Sub
  1. Torna a Excel, esegui la macro EvidenziaCelle.
  2. Verifica che le celle con un valore maggiore di 100 siano evidenziate in rosso.
1. Inserisci il codice per evidenziare le celle in base al loro valore.
2. Esegui la macro e verifica il risultato.

Esercizio 9: Creare una Macro per Proteggere e Sproteggere un Foglio

Crea una macro VBA che protegge un foglio con una password e un'altra macro che lo sprotegge.

Istruzioni:

  1. Apri l’Editor VBA e inserisci un nuovo modulo.
  2. Scrivi il seguente codice VBA per proteggere il foglio:
Sub ProteggiFoglio()
    ActiveSheet.Protect Password:="1234"
End Sub
  1. Scrivi un altro codice VBA per sproteggere il foglio:
Sub SproteggiFoglio()
    ActiveSheet.Unprotect Password:="1234"
End Sub
  1. Torna a Excel, esegui prima la macro ProteggiFoglio e poi la macro SproteggiFoglio.
  2. Verifica che il foglio sia protetto e successivamente sprotetto.
1. Inserisci il codice per proteggere e sproteggere il foglio.
2. Esegui le macro e verifica che il foglio sia protetto/sprotetto correttamente.

Esercizio 10: Creare una Macro per Gestire Eventi del Foglio

Crea una macro VBA che visualizza un messaggio di benvenuto ogni volta che si attiva un determinato foglio in Excel.

Istruzioni:

  1. Apri l’Editor VBA e nella sezione ThisWorkbook, seleziona l’evento Workbook_SheetActivate.
  2. Inserisci il seguente codice:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Foglio1" Then
        MsgBox "Benvenuto sul Foglio1!"
    End If
End Sub
  1. Torna a Excel, attiva il foglio “Foglio1”.
  2. Verifica che venga visualizzato il messaggio di benvenuto.
1. Inserisci il codice nell'evento Workbook_SheetActivate.
2. Attiva il foglio e verifica che venga visualizzato il messaggio.
Navigazione