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.

parte superiore del modulo
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.

MacrowEsercitati 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 scriveresignificato
Sub MacroName() 〜 End SubL'inizio e la fine di una Macro (procedura)
' Commento' Note che non vengono eseguite fino alla fine della riga
Dim item As LongPreparare 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).RowL'ultima riga con i dati nella colonna A
.Valuevalore della cella
If condition Then 〜 End IfEseguire solo quando le condizioni sono soddisfatte
For i = 1 To 10 〜 Next iripetere un determinato numero di volte
For Each item In targetRange 〜 NextElabora le celle nell'intervallo una per una
Function MacroName() … End FunctionFunzione 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.

Forma base della 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.

chiamata Macro
Sub RunAll()
    Call CheckSales     ' chiamare un'altra Macro
    Call SayHello
End Sub

Come 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 "=".

Preparare e utilizzare le variabili
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
muffaCosa inserire
LongNumero intero (numero di riga, numero di elementi, ecc.)
DoubleNumeri comprensivi di decimali (importi, percentuali, ecc.)
Stringstringa
DateData/ora
BooleanTrue / False
VariantTutto può andare bene (quando non decidi il tipo)
Worksheet / RangeFoglio/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.

Inserisci le celle del foglio nelle variabili
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.ClearContents

Per 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.

costante
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.

Specificare celle/intervalli
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 foglio

Se 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.

ultima riga
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 riga

Intera tabella/sposta/espandi

Regione corrente・Offset・Ridimensiona
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.

Valore/Formula/Formato
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 incolla

Ramificazione 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 〜 ElseIf 〜 Else
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 If
Giudizio vuoto/condizioni multiple
If 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 If

Quando si divide in più modi in base a un valore, "Seleziona caso" è più facile da leggere.

Select Case
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 Select

Ripeti (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.

For … Next (2–10)
Dim i As Long
For i = 2 To 10
    Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next i

Quando elabori le celle di un intervallo o i fogli di una cartella di lavoro uno per uno, utilizza "Per ciascuno".

For Each
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 ws

Se 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 .

Do While 〜 Loop
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
Loop
Esci per
For i = 2 To 100
    If Cells(i, 1).Value = "Totale" Then Exit For   ' uscire a metà
Next i

Come 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
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 Sub

Utilizzo delle funzioni del foglio di lavoro con VBA

Le funzioni utilizzate nelle celle, come SOMMA e CONTA.SE, possono essere chiamate con "WorksheetFunction".

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.

Formato・Len・Sinistra・Sostituisci ecc.
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 dopo

Messaggio 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 · InputBox
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

libro a fogli
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 lavoro

Se 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".

Interrompe gli aggiornamenti dello schermo
Sub RunFaster()
    Application.ScreenUpdating = False   ' Interrompe gli aggiornamenti dello schermo
    ' ...Processo che richiede tempo...
    Application.ScreenUpdating = True    ' tornare all'ultimo
End Sub
Preparati agli errori
Sub HandleErrors()
    On Error GoTo ErrHandler
    Worksheets("conteggio").Range("A1").Value = "OK"
    Exit Sub
ErrHandler:
    MsgBox "Ho ricevuto un errore:" & Err.Description
End Sub

Esempio 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ù.

Controllo delle vendite
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 Sub

Contiene 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.