Introduzione alle Macro e al VBA
Come iniziare con Excel VBA
Elenco dei codici utilizzati di frequente
Abbiamo riassunto i preparativi per iniziare a scrivere VBA e i codici di base che vengono spesso utilizzati. Introdurremo esempi che puoi copiare e provare, tra cui la specifica di cella/intervallo, variabili, ramificazioni condizionali, ripetizione e come scrivere funzioni.
Se vuoi sapere cosa sono le Macro e VBA, consulta prima Articolo introduttivo a Macro/VBA.
Preparazione dell'ambiente di Sviluppo (Windows)
Non hai bisogno di nessun altro software per scrivere VBA. Scrivilo in VBE(Visual Basic Editor) in Excel ed eseguilo così com'è. Innanzitutto, prepara quanto segue solo una volta.
1. Mostra la scheda sviluppatore
Apri "File" → "Opzioni" → "Personalizza barra multifunzione", seleziona "Sviluppatore" nell'elenco delle "Schede principali" sulla destra e premi "OK". Sulla barra multifunzione verrà visualizzata la scheda "Sviluppatore".
2. Apri VBE
Fai clic su "Visual Basic" nella scheda "Sviluppatore".Alt+F11Ma posso aprirlo. Premendolo di nuovo tornerai alla schermata di Excel.
3. Aggiungi modulo standard
Selezionare "Inserisci" → "Modulo standard" dal menu VBE. "Module1" verrà creato nel progetto a sinistra e potrai scrivere il codice a destra. Le Macro ordinarie sono scritte in questo modulo standard.
4. Attiva "Forza dichiarazione di variabili"
Seleziona "Forza dichiarazione di variabile" nella scheda "Strumenti" → "Opzioni" → "Modifica" di VBE. La riga seguente viene inserita automaticamente all'inizio del modulo appena creato e verrà visualizzato un messaggio di errore per informarti se hai digitato in modo errato il nome di una variabile.
Option Explicit ' All’inizio del modulo, questa istruzione richiede di dichiarare le variabili con Dim.5. Scrivi ed esegui
Dopo aver scritto il codice, fare clic all'interno di Sub ~ End Sub e quindi premere "▲" (Sub/Run User Form) sulla barra degli strumenti, oppureF5Premere Dalla schermata Excel, fare clic su "Macro" (Alt+F8) per selezionare un nome ed eseguirlo.
Se vuoi verificare i valori intermedi, vai su "Visualizza" → "Finestra Immediata" di VBE (Ctrl+G) e scrivi "Nome variabile Debug.Print" nel codice, il valore apparirà lì.
6. Salva come cartella di lavoro con attivazione Macro (.xlsm)
Per la cartella di lavoro in cui hai scritto VBA, seleziona "Cartella di lavoro con attivazione Macro di Excel (*.xlsm)" in "Salva con nome". Se lo salvi come un normale file .xlsx, il codice che hai scritto andrà perso.
Quando apri la cartella di lavoro, se ricevi un messaggio che dice "Avviso di sicurezza: le Macro sono state disabilitate", fai clic su "Abilita contenuto" solo se la cartella di lavoro è quella creata da te o di cui ti fidi. Le Macro potrebbero essere bloccate nei file salvati dalla posta elettronica o da Internet. In tal caso, fai clic con il pulsante destro del mouse sul file → seleziona "Proprietà" e seleziona "Consenti".
Le modifiche apportate utilizzando una Macro non possono essere annullate utilizzando Ctrl+Z.Quando lo provi, utilizza una copia della cartella di lavoro o i dati pratici.
Per Mac, visualizza la scheda sviluppatore selezionando il menu "Excel" → "Preferenze" → "Ribbon e barra degli strumenti" e apri VBE in "Visual Basic" nella scheda sviluppatore.
Esercitati a utilizzare il browserFai pratica dalla visualizzazione della scheda di Sviluppo all'Esegui del codice →Un elenco di riferimento rapido dei codici utilizzati di frequente
Se riesci a leggere così tanto, sarai in grado di leggere molte delle Macro e dei codici registrati creati dall'intelligenza artificiale. Istruzioni dettagliate per ciascuno sono introdotte nelle sezioni seguenti.
| Come scrivere | significato |
|---|---|
| Sub MacroName() 〜 End Sub | L'inizio e la fine di una Macro (procedura) |
| ' Commento | ' Note che non vengono eseguite fino alla fine della riga |
| Dim item As Long | Preparare una variabile (Long è un numero intero) |
| Set item = Worksheets("conteggio") | Inserisci fogli, celle, ecc. nelle variabili |
| Range("A1") | Cella A1 |
| Range("A1:C5") | Gamma da A1 a C5 |
| Cells(row, column) | Specificare le celle per numero di riga/colonna |
| Cells(Rows.Count, 1).End(xlUp).Row | L'ultima riga con i dati nella colonna A |
| .Value | valore della cella |
| If condition Then 〜 End If | Eseguire solo quando le condizioni sono soddisfatte |
| For i = 1 To 10 〜 Next i | ripetere un determinato numero di volte |
| For Each item In targetRange 〜 Next | Elabora le celle nell'intervallo una per una |
| Function MacroName() … End Function | Funzione fatta in casa che restituisce un valore |
| WorksheetFunction.Sum(targetRange) | Utilizzo delle funzioni del foglio di lavoro con VBA |
| MsgBox "personaggi" | mostra il messaggio |
Forma base di Macro (Sub) e commenti
La Macro inizia con "Nome Macro sub()" e termina con "End Sub". I comandi scritti durante questo periodo verranno eseguiti in ordine dall'alto. Il giapponese può essere utilizzato anche nei nomi delle Macro.
Sub SayHello()
' Questa riga è commentata (non eseguita)
MsgBox "Ciao"
End Sub「'" (virgolette singole) alla fine della riga c'è un commento. Scrivere quello che stai facendo ti aiuterà a leggerlo più tardi o a trasmetterlo a qualcun altro.
Utilizzare "Chiama" per chiamare altre Macro.
Sub RunAll()
Call CheckSales ' chiamare un'altra Macro
Call SayHello
End SubCome scrivere variabili e costanti
Le variabili sono caselle che memorizzano i valori che vengono calcolati o valori che vengono utilizzati più volte. Preparatelo con "Nome variabile dim Come tipo" e inserite il valore con "=".
Sub VariablesExample()
Dim total As Long ' intero
Dim customer As String ' stringa
Dim price As Double ' numeri con decimali
Dim today As Date ' Data
Dim finished As Boolean ' Vero o falso
total = 12
customer = "Komorebi Shop"
price = 1200.5
today = Date
finished = False
Range("A1").Value = customer & ":" & total & "materia"
End Sub| muffa | Cosa inserire |
|---|---|
| Long | Numero intero (numero di riga, numero di elementi, ecc.) |
| Double | Numeri comprensivi di decimali (importi, percentuali, ecc.) |
| String | stringa |
| Date | Data/ora |
| Boolean | True / False |
| Variant | Tutto può andare bene (quando non decidi il tipo) |
| Worksheet / Range | Foglio/cella (inserto con set) |
Quando memorizzi "cose" (oggetti) come fogli o celle in variabili, aggiungi "Impostato" all'inizio. Se dimentichi di allegarlo, si verificherà un errore, in cui spesso inciampo.
Dim ws As Worksheet
Set ws = Worksheets("conteggio") ' Inserisci fogli e celle con Set
ws.Range("A1").Value = "Vendite totali"
Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContentsPer i valori che non cambiano durante il processo, come l'aliquota dell'imposta sui consumi, se usi "Const" per renderla costante, devi solo cambiare una posizione quando la cambi.
Const TAX_RATE As Double = 0.1 ' Un valore che non cambia durante il processo
Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)Come specificare celle/intervalli
La cosa più comune da scrivere in VBA è specificare le celle. 「Range("A1")" è l'indirizzo della cella e "Celle (riga, colonna)" è specificato dal numero.Le celle, che possono essere specificate tramite numero, sono utili quando si spostano le righe una alla volta durante la ripetizione.
Range("A1").Value = 100 ' A1
Range("A1:C3").Value = 0 ' Raggruppati in A1-C3
Range("A:A").Font.Bold = True ' Tutta la colonna A
Range("2:2").Font.Bold = True ' tutta la seconda fila
Cells(2, 3).Value = "C2" ' 2a riga/3a colonna (C2)
Range(Cells(1, 1), Cells(5, 3)).Select ' A1〜C5
Worksheets("conteggio").Range("A1").Value = "Totale" ' Specificare il foglioSe non si scrive un nome per il foglio, verrà preso di mira il foglio attualmente aperto (foglio attivo). Quando si utilizza un altro foglio, fare clic suWorksheets("nome del foglio")."di fronte.
trova l'ultima riga
Per le tabelle in cui il numero di righe cambia ogni mese, controlla la quantità di dati presenti prima dell'elaborazione. Questo è un modo di scrivere per trovare il numero di riga della prima cella che contiene dati, partendo dalla cella inferiore della colonna A e procedendo verso l'alto.
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Cerca dal basso della colonna A verso l'alto
Range("A2:A" & lastRow).Font.Bold = True ' Dalla fine dell'intestazione all'ultima rigaIntera tabella/sposta/espandi
Range("A1").CurrentRegion.Select ' Intero tavolo collegato ad A1
Range("A1").Offset(1, 0).Value = "fondo" ' 1 riga sotto (A2)
Range("A1").Offset(0, 2).Value = "giusto" ' 2a fila a destra (C1)
Range("A1").Resize(3, 2).Select ' 3 righe x 2 colonne da A1 (A1:B3)Manipolazione di valori, formule e formati
I valori delle celle vengono letti e scritti utilizzando ".Value". Per la formula, inserire in ".Formula" la stessa stringa utilizzata per l'immissione in Excel.
Range("D2").Formula = "=B2*C2" ' inserisci la formula
Range("A2:D10").ClearContents ' Elimina solo il valore (il formato rimane)
Range("A1").Font.Bold = True ' Grassetto
Range("A1").Interior.Color = RGB(255, 242, 204) ' colore di riempimento
Range("D2:D10").NumberFormat = "#,##0" ' Separatore di 3 cifre
Range("A1:D10").Copy Destination:=Worksheets("riserva").Range("A1") ' copia e incollaRamificazione condizionale (If · Select Case)
Utilizzare "Se ~ Allora" per separare l'elaborazione in base alle condizioni. Non dimenticare "End If" alla fine.Utilizza "ElseIf" per dividere la condizione in più condizioni e "Else" quando non si applica nessuna delle condizioni.
If Range("B2").Value >= 80 Then
Range("C2").Value = "Superato"
ElseIf Range("B2").Value >= 60 Then
Range("C2").Value = "Riconferma"
Else
Range("C2").Value = "Fallire"
End IfIf Range("A2").Value = "" Then
MsgBox "A2 è vuoto"
End If
' E (entrambi), Oppure (uno dei due), <> (non uguale)
If Range("B2").Value >= 60 And Range("C2").Value <> "Assenza" Then
Range("D2").Value = "OK"
End IfQuando si divide in più modi in base a un valore, "Seleziona caso" è più facile da leggere.
Select Case Range("B2").Value
Case "Tokio", "Yokohama"
Range("C2").Value = "Kanto"
Case "Osaka", "Kyoto"
Range("C2").Value = "Kansai"
Case Else
Range("C2").Value = "Altro"
End SelectRipeti (For · For Each · Do While)
L'esecuzione della stessa elaborazione per ogni riga è il punto in cui VBA mostra la sua massima potenza."For ~ Next" si ripete incrementando la variabile i di 1.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iQuando elabori le celle di un intervallo o i fogli di una cartella di lavoro uno per uno, utilizza "Per ciascuno".
Dim cell As Range
For Each cell In Range("A2:A10")
If cell.Value = "" Then
cell.Interior.Color = RGB(255, 199, 206) ' riempire gli spazi vuoti con il rosso
End If
Next cell
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets ' tutti i fogli
ws.Range("A1").Font.Bold = True
Next wsSe la riga finale non è determinata, usa "Fai mentre" per ripetere finché le condizioni sono soddisfatte.Se dimentichi "r = r + 1", non sarai in grado di fermarti.Quando non si ferma,EscOppureCtrl+BreakPuoi interromperlo con .
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> "" ' Fino a quando la colonna A è vuota
Cells(r, 5).Value = "Confermato"
r = r + 1
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Totale" Then Exit For ' uscire a metà
Next iCome scrivere e utilizzare le funzioni
Quando parliamo di "funzioni" in VBA, ne esistono tre tipi:
Crea la tua funzione (Funzione)
Se lo crei utilizzando "Funzione", diventerà una funzione che restituisce il valore calcolato. Se inserisci un valore nel nome della funzione, questo è il risultato.Se lo scrivi in un modulo standard, puoi inserire "=Importo IVA inclusa (A2)" in una cella e utilizzarlo come una funzione del foglio di lavoro.
Function PriceWithTax(price As Double) As Double
PriceWithTax = price * 1.1 ' Il valore inserito nel nome della funzione diventa il risultato.
End Function
Sub UseFunction()
Range("B2").Value = PriceWithTax(Range("A2").Value)
End SubUtilizzo delle funzioni del foglio di lavoro con VBA
Le funzioni utilizzate nelle celle, come SOMMA e CONTA.SE, possono essere chiamate con "WorksheetFunction".
Range("C11").Value = WorksheetFunction.Sum(Range("C2:C10"))
Range("C12").Value = WorksheetFunction.Average(Range("C2:C10"))
Range("C13").Value = WorksheetFunction.CountIf(Range("B2:B10"), "Tokio")Funzioni VBA
VBA fornisce anche funzioni che gestiscono date e stringhe.
Range("A1").Value = Format(Date, "yyyy-mm-dd") ' la data odierna nel testo
Range("A2").Value = Now ' data e ora correnti
Range("A3").Value = Len("Komorebi Shop") ' Numero di caratteri → 13
Range("A4").Value = Left("2026-10-06", 4) ' 4 caratteri da sinistra → 2026
Range("A5").Value = Replace("Tokio Ramo", "Ramo", "") ' Sostituisci → Tokio
Range("A6").Value = Trim(" Tokio ") ' Cancella gli spazi prima e dopoMessaggio e input (MsgBox · InputBox)
Utilizzato per notificare la fine dell'elaborazione o per confermare prima dell'Esegui. Se usi "InputBox", puoi inserire il mese, il responsabile, ecc. ogni volta che esegui il programma.
MsgBox "E' finita"
If MsgBox("Vuoi eseguirlo?", vbYesNo) = vbNo Then Exit Sub
Dim answer As String
answer = InputBox("Quanti mesi?")
Range("A1").Value = answer & "Mensile"Operazioni su fogli/libri
Worksheets("Vendite").Activate ' cambiare fogli
Worksheets("Vendite").Copy After:=Worksheets(Worksheets.Count) ' foglio di copia
ActiveSheet.Name = "Ott" ' Cambia nome foglio
Worksheets.Add After:=Worksheets(Worksheets.Count) ' aggiungi foglio
Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokio_October.xlsx")
book.Close SaveChanges:=False ' Chiudi senza salvare
ThisWorkbook.Save ' Salva questa cartella di lavoroSe c'è molta elaborazione da fare, puoi interrompere l'aggiornamento dello schermo e finirà più velocemente. È possibile scrivere il processo quando si verifica un errore utilizzando "On Error GoTo".
Sub RunFaster()
Application.ScreenUpdating = False ' Interrompe gli aggiornamenti dello schermo
' ...Processo che richiede tempo...
Application.ScreenUpdating = True ' tornare all'ultimo
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("conteggio").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Ho ricevuto un errore:" & Err.Description
End SubEsempio combinato: calcolo e colorazione della tabella delle vendite
Combinando il codice finora, otteniamo questo: nel foglio "Vendite", in una tabella con il nome del prodotto nella colonna A, la quantità nella colonna B e il prezzo unitario nella colonna C, calcola l'importo nella colonna D e colora di verde le righe di 100.000 yen o più.
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = Worksheets("Vendite")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' Importo = Quantità × Prezzo unitario
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Se supera i 100.000 yen, è verde.
If ws.Cells(i, 4).Value >= 100000 Then
ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
Else
ws.Cells(i, 4).Interior.ColorIndex = xlNone
End If
Next i
MsgBox lastRow - 1 & "calcolato la riga"
End SubContiene variabili (Dim), specifica del foglio (Set), riga finale, ripetizione (For) e diramazione condizionale (If). Se riesci a leggere "cosa viene fatto in quale cella" riga per riga, puoi modificare il numero di righe e le condizioni per adattarle alla tua tabella.
Anche quando l'intelligenza artificiale crea il codice, se riesci a leggere questa forma, puoi verificare tu stesso quale colonna viene calcolata e se le condizioni sono soddisfatte.
Scopri di più
Si consiglia di verificare la lista dei codici per vedere come scriverlo e poi di provarlo utilizzando il file del materiale didattico. Questo libro introduttivo passo dopo passo ti consente di esercitarti su qualsiasi cosa, dalla registrazione di Macro alle variabili, alla ripetizione e alla ramificazione condizionale con esempi collegati.
Per coloro che si sentono costretti a farlo da soli o per coloro che vorrebbero discutere aree del proprio lavoro che possono essere automatizzate, anche un corso tenuto da un istruttore è un'opzione.
Come scegliere un metodo di studio è introdotto anche in Come studiare Macro e VBA.