Articoli

Esempi di Macro Excel scritte con VBA

I seguenti semplici esempi di macro di Excel sono state scritte utilizzando VBA 

Tempo di lettura stimato: 3 minuti

Esempio VBA uso Array

La seguente procedura Sub legge i valori dalle celle della colonna A del foglio di lavoro attivo, finché non incontra una cella vuota. I valori vengono memorizzati in un array. Questo semplice esempio di macro di Excel illustra l’uso di:

  • Dichiarazioni variabili;
  • Array dinamici;
  • Un ciclo Do Until;
  • Fare riferimento alle celle nel foglio di lavoro Excel corrente;
  • La funzione VBA Ubound incorporata (che restituisce l’indice più alto di un array).
' Sub procedure store values in Column A of the active Worksheet
' into an array
Sub GetCellValues()
Dim iRow As Integer            ' stores the current row number
Dim dCellValues() As Double  ' array to store the cell values
iRow = 1
ReDim dCellValues(1 To 10)
' Do Until loop to extract the value of each cell in column A
' of the active Worksheet, as long as the cell is not blank
Do Until IsEmpty(Cells(iRow, 1))
   ' Check that the dCellValues array is big enough
   ' If not, use ReDim to increase the size of the array by 10
   If UBound(dCellValues) < iRow Then
      ReDim Preserve dCellValues(1 To iRow + 9)
   End If
   ' Store the current cell in the CellValues array
   dCellValues(iRow) = Cells(iRow, 1).Value
   iRow = iRow + 1
Loop
End Sub

La procedura memorizza i valori nella colonna A del foglio di lavoro attivo in un array, da osservare che:

  • Il ciclo Do Until estrae i valori di ogni cella nella colonna A del foglio di lavoro attivo, ignorando le celle vuote
  • La condizione “If UBound(dCellValues) < iRow” controlla che l’array dCellValues ​​sia abbastanza grande per contenere le informazioni, in caso contrario, utilizza ReDim per aumentare la dimensione dell’array di 10
  • Infine l’istruzione “​​dCellValues(iRow) = Cells(iRow, 1).Value” Memorizza la cella corrente nell’array CellValues

Esempio VBA con operazioni matematiche

La seguente procedura Sub legge i valori dalla colonna A del foglio di lavoro denominato “Foglio2” ed esegue operazioni aritmetiche sui valori. I valori risultanti vengono stampati nella colonna A del foglio di lavoro attivo corrente.

Questa macro illustra:

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.
  • Dichiarazioni variabili;
  • Oggetti Excel (nello specifico, utilizzo della parola chiave Set e modalità di accesso all’oggetto ‘Colonne’ dall’oggetto ‘Fogli’);
  • Un ciclo Do Until;
  • Accesso ai fogli di lavoro e agli intervalli di celle nella cartella di lavoro di Excel corrente.
' Sub procedure to loop through the values in Column A of the Worksheet
' "Sheet2", perform arithmetic operations on each value, and write the
' result into Column A of the current Active Worksheet ("Sheet1")
Sub Transfer_ColA()
Dim i As Integer
Dim Col As Range
Dim dVal As Double
' Set the variable 'Col' to be Column A of Sheet 2
Set Col = Sheets("Sheet2").Columns("A")
i = 1
' Loop through each cell of the column 'Col' until
' a blank cell is encountered
Do Until IsEmpty(Col.Cells(i))
   ' Apply arithmetic operations to the value of the current cell
   dVal = Col.Cells(i).Value * 2 + 1
   ' The command below copies the result into Column A
   ' of the current Active Worksheet - no need to specify
   ' the Worksheet name as it is the active Worksheet.
   Cells(i, 1) = dVal
   i = i + 1
Loop
End Sub

Esempio VBA con registrazione data modifica

Scriviamo una semplice macro VBA che si attiva quando viene aggiornata una cella in un intervallo specifico del nostro foglio. Supponiamo di voler tenere traccia delle modifiche nella colonna B (da B4 a B11) e registrare la data e l’ora della modifica nella colonna A.
Procediamo così:

  • Nella scheda Developer clicca su opzione “Visual Basic” per aprire l’editor VBA.
  • Nell’editor VBA, fare doppio clic sull’editor di codice correlato a Foglio2.
  • Scegli Foglio di lavoro dalla scheda a destra (o sinistra) e seleziona l’opzione Cambia.
  • Aggiungi il codice VBA:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
        Target.Range("A1:A1").Value = Now
    End If
End Sub

Salva la cartella di lavoro con le macro abilitate (ad esempio, come file .xlsm).


A questo punto, ogni volta che aggiorniamo una cella nella colonna B (da riga 1 a riga 10), la cella in colonna A visualizzerà automaticamente la data e l’ora correnti.

Ercole Palmeri

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

Articoli recenti

Veeam presenta il supporto più completo per il ransomware, dalla protezione alla risposta e al ripristino

Coveware by Veeam continuerà a fornire servizi di risposta agli incidenti di cyber-estorsione. Coveware offrirà funzionalità di forensics e remediation…

23 Aprile 2024

Rivoluzione Verde e Digitale: Come la Manutenzione Predittiva sta Trasformando il Settore Oil & Gas

La manutenzione predittiva sta rivoluzionando il settore dell'oil & gas, con un approccio innovativo e proattivo alla gestione degli impianti.…

22 Aprile 2024

L’autorità antitrust del Regno Unito lancia l’allarme BigTech su GenAI

La CMA del Regno Unito ha lanciato un avvertimento circa il comportamento delle Big Tech sul mercato dell’intelligenza artificiale. La…

18 Aprile 2024

Casa Green: rivoluzione energetica per un futuro sostenibile in Italia

Il Decreto "Case Green", formulato dall'Unione Europea per potenziare l'efficienza energetica degli edifici, ha concluso il suo iter legislativo con…

18 Aprile 2024