Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Lavorare con gli operatori | Fondamenti Di VBA
Excel VBA per l'Automazione Aziendale

Lavorare con gli operatori

Scorri per mostrare il menu

Dichiarare le variabili ti permette di avere uno spazio dove memorizzare i valori. Gli operatori sono il modo in cui combini, confronti e testi questi valori — ovvero come esprimi una regola aziendale nel codice. "La giacenza è inferiore al livello di riordino?" è un operatore di confronto. "Riordina se la giacenza è bassa E il prodotto è Elettronica" è un operatore logico.

Operatori aritmetici

La maggior parte di questi si comporta esattamente come ti aspetteresti da una calcolatrice, ma VBA ha due operatori di divisione che fanno cose realmente diverse:

Dim total As Double
total = 45 * 3      ' multiplication → 135
total = 100 / 3     ' division → 33.33...
total = 100 \ 3     ' integer division → 33 (drops remainder)
total = 100 Mod 3   ' remainder only → 1
total = 2 ^ 3       ' exponent → 8

La barra rovesciata (\) e Mod sono quelli che creano più confusione, perché sembrano simili ma rispondono a domande opposte. 100 \ 3 risponde a "quante volte intere il 3 sta nel 100?" — la risposta è 33, e tutto ciò che resta viene scartato. 100 Mod 3 risponde alla domanda speculare, "cosa rimane dopo che il 3 è stato tolto dal 100 tutte le volte possibili?" — la risposta è 1. Insieme, 33 gruppi da 3 più un resto di 1 fanno 100 — non è una coincidenza, è proprio ciò per cui questi due operatori sono progettati. Questa coppia è esattamente come calcoleresti "quante scatole piene da 3 posso riempire e quanti pezzi restano per una scatola parziale?" oppure per verificare se un numero di riga è pari (i Mod 2 = 0).

Operatori di confronto

Questi restituiscono True o False:

44 > 30      ' True
44 = 44      ' True
"Office" = "office"   ' False — VBA's default string comparison IS case-sensitive
44 <> 30     ' True (not equal)

Operatori logici

Questi combinano due o più confronti in un unico risultato True/False — proprio come una regola aziendale con più condizioni viene espressa:

If category = "Electronics" And stock < 30 Then
    ' triggers only if BOTH are true
End If
 
If category = "Office" Or category = "Electronics" Then
    ' triggers if EITHER is true
End If
 
If Not (stock < reorderLevel) Then
    ' triggers if stock is NOT below reorder level
End If

And richiede che tutte le condizioni collegate siano True prima che l'espressione complessiva sia True — il primo esempio si attiva solo per i prodotti di Elettronica che sono anche realmente a bassa giacenza, non per ogni prodotto a bassa giacenza indipendentemente dalla categoria. Or richiede che almeno una condizione sia True, ed è il modo per verificare l'appartenenza a un piccolo insieme di valori accettabili. Not semplicemente inverte un risultato True/False nel suo opposto — viene spesso usato, come nel terzo esempio, per esprimere una regola come "NON la condizione negativa" quando questa forma risulta più naturale rispetto a riscrivere direttamente la condizione positiva.

Concatenazione di stringhe

Unisce testo con & (non +, che VBA riserva ai numeri):

Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134

Nota che currentStock è un numero (134), non testo, ma viene comunque concatenato nella stringa senza alcun passaggio di conversione — VBA converte automaticamente un numero nella sua rappresentazione testuale quando usi &. Questa comodità è proprio il motivo per cui & è preferito rispetto a + per unire testo: se scrivessi "Stock: " + currentStock, VBA proverebbe a interpretare tutta l'espressione come aritmetica e potrebbe generare un errore o un risultato confuso, a seconda del contesto. & significa sempre "unisci come testo", senza ambiguità.

Esercizio

  1. Utilizzando i dati del Monitor Arm (Prezzo 89.99, Giacenza 18, Livello di riordino 10), scrivi un'espressione che verifichi se la giacenza è minore o uguale al livello di riordino più 10 — un avviso di "quasi esaurimento" invece di un allarme vero e proprio.
  2. Costruisci un messaggio concatenato: "Monitor Arm è a 18 unità (riordino a 10)" usando variabili, non testo fisso.
Suggerimento
expand arrow

1. L'espressione "quasi esaurito"

  • Sono necessarie tre variabili: una per la giacenza (18), una per il livello di riordino (10) e un'espressione che le confronti.
  • "Minore o uguale a" è un operatore di confronto singolo <=.
  • La frase "livello di riordino più 10" significa che non si confronta la giacenza direttamente con 10, ma con un valore calcolato. Scrivi l'addizione direttamente nel confronto: stock <= reorderLevel + 10.
  • Per vedere effettivamente il risultato, assegnalo a una variabile Boolean.
  • Calcola manualmente quanto fa 10 + 10 prima di eseguire il codice, così saprai se 18 <= 20 deve restituire True o False, e verifica che il codice sia coerente.

2. Composizione del messaggio

  • L'operatore che unisce il testo è &, non +.
  • Analizza l'output desiderato pezzo per pezzo: "Monitor Arm is at " + (il numero di giacenza) + " units (reorder at " + (il livello di riordino) + ")". Conta i pezzi: sono cinque, alternando testo letterale tra virgolette e una variabile.
  • Il compito richiede "usare variabili, non testo fisso" — quindi il 18 e il 10 nel messaggio finale devono provenire dalle variabili di giacenza e reorderLevel, non essere numeri scritti direttamente nella stringa.
  • Concatenare un numero con & non richiede conversione — VBA lo trasforma automaticamente in testo, quindi puoi unire una variabile numerica direttamente alla stringa.
  • Costruisci tutto in una variabile String (message = ...), poi visualizzala con MsgBox message per verificare che corrisponda esattamente all'output atteso, incluse parentesi e spaziatura.

Oppure usa il seguente codice

Apri Section_2_VBA_Fundamentals.xlsm, premi Alt+F11 e utilizza il modulo su cui stai lavorando per questa cartella di lavoro (inseriscine uno tramite Inserisci → Modulo se non ne hai ancora uno — seguendo lo stesso schema di modIntro nella Sezione 1, puoi chiamarlo modFundamentals).

Sub MonitorArmCheck()
    Dim stock As Integer
    Dim reorderLevel As Integer
    Dim isGettingClose As Boolean
    Dim message As String

    stock = 18
    reorderLevel = 10

    ' Part 1 — the "getting close" check
    isGettingClose = stock <= reorderLevel + 10
    MsgBox isGettingClose

    ' Part 2 — the concatenated message
    message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
    MsgBox message
End Sub

Fai clic in qualsiasi punto all'interno della Sub, poi premi F5. Dovresti vedere comparire due finestre di messaggio una dopo l'altra: prima True (poiché 18 ≤ 20), poi la frase.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Lavorare con gli operatori

Dichiarare le variabili ti permette di avere uno spazio dove memorizzare i valori. Gli operatori sono il modo in cui combini, confronti e testi questi valori — ovvero come esprimi una regola aziendale nel codice. "La giacenza è inferiore al livello di riordino?" è un operatore di confronto. "Riordina se la giacenza è bassa E il prodotto è Elettronica" è un operatore logico.

Operatori aritmetici

La maggior parte di questi si comporta esattamente come ti aspetteresti da una calcolatrice, ma VBA ha due operatori di divisione che fanno cose realmente diverse:

Dim total As Double
total = 45 * 3      ' multiplication → 135
total = 100 / 3     ' division → 33.33...
total = 100 \ 3     ' integer division → 33 (drops remainder)
total = 100 Mod 3   ' remainder only → 1
total = 2 ^ 3       ' exponent → 8

La barra rovesciata (\) e Mod sono quelli che creano più confusione, perché sembrano simili ma rispondono a domande opposte. 100 \ 3 risponde a "quante volte intere il 3 sta nel 100?" — la risposta è 33, e tutto ciò che resta viene scartato. 100 Mod 3 risponde alla domanda speculare, "cosa rimane dopo che il 3 è stato tolto dal 100 tutte le volte possibili?" — la risposta è 1. Insieme, 33 gruppi da 3 più un resto di 1 fanno 100 — non è una coincidenza, è proprio ciò per cui questi due operatori sono progettati. Questa coppia è esattamente come calcoleresti "quante scatole piene da 3 posso riempire e quanti pezzi restano per una scatola parziale?" oppure per verificare se un numero di riga è pari (i Mod 2 = 0).

Operatori di confronto

Questi restituiscono True o False:

44 > 30      ' True
44 = 44      ' True
"Office" = "office"   ' False — VBA's default string comparison IS case-sensitive
44 <> 30     ' True (not equal)

Operatori logici

Questi combinano due o più confronti in un unico risultato True/False — proprio come una regola aziendale con più condizioni viene espressa:

If category = "Electronics" And stock < 30 Then
    ' triggers only if BOTH are true
End If
 
If category = "Office" Or category = "Electronics" Then
    ' triggers if EITHER is true
End If
 
If Not (stock < reorderLevel) Then
    ' triggers if stock is NOT below reorder level
End If

And richiede che tutte le condizioni collegate siano True prima che l'espressione complessiva sia True — il primo esempio si attiva solo per i prodotti di Elettronica che sono anche realmente a bassa giacenza, non per ogni prodotto a bassa giacenza indipendentemente dalla categoria. Or richiede che almeno una condizione sia True, ed è il modo per verificare l'appartenenza a un piccolo insieme di valori accettabili. Not semplicemente inverte un risultato True/False nel suo opposto — viene spesso usato, come nel terzo esempio, per esprimere una regola come "NON la condizione negativa" quando questa forma risulta più naturale rispetto a riscrivere direttamente la condizione positiva.

Concatenazione di stringhe

Unisce testo con & (non +, che VBA riserva ai numeri):

Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134

Nota che currentStock è un numero (134), non testo, ma viene comunque concatenato nella stringa senza alcun passaggio di conversione — VBA converte automaticamente un numero nella sua rappresentazione testuale quando usi &. Questa comodità è proprio il motivo per cui & è preferito rispetto a + per unire testo: se scrivessi "Stock: " + currentStock, VBA proverebbe a interpretare tutta l'espressione come aritmetica e potrebbe generare un errore o un risultato confuso, a seconda del contesto. & significa sempre "unisci come testo", senza ambiguità.

Esercizio

  1. Utilizzando i dati del Monitor Arm (Prezzo 89.99, Giacenza 18, Livello di riordino 10), scrivi un'espressione che verifichi se la giacenza è minore o uguale al livello di riordino più 10 — un avviso di "quasi esaurimento" invece di un allarme vero e proprio.
  2. Costruisci un messaggio concatenato: "Monitor Arm è a 18 unità (riordino a 10)" usando variabili, non testo fisso.
Suggerimento
expand arrow

1. L'espressione "quasi esaurito"

  • Sono necessarie tre variabili: una per la giacenza (18), una per il livello di riordino (10) e un'espressione che le confronti.
  • "Minore o uguale a" è un operatore di confronto singolo <=.
  • La frase "livello di riordino più 10" significa che non si confronta la giacenza direttamente con 10, ma con un valore calcolato. Scrivi l'addizione direttamente nel confronto: stock <= reorderLevel + 10.
  • Per vedere effettivamente il risultato, assegnalo a una variabile Boolean.
  • Calcola manualmente quanto fa 10 + 10 prima di eseguire il codice, così saprai se 18 <= 20 deve restituire True o False, e verifica che il codice sia coerente.

2. Composizione del messaggio

  • L'operatore che unisce il testo è &, non +.
  • Analizza l'output desiderato pezzo per pezzo: "Monitor Arm is at " + (il numero di giacenza) + " units (reorder at " + (il livello di riordino) + ")". Conta i pezzi: sono cinque, alternando testo letterale tra virgolette e una variabile.
  • Il compito richiede "usare variabili, non testo fisso" — quindi il 18 e il 10 nel messaggio finale devono provenire dalle variabili di giacenza e reorderLevel, non essere numeri scritti direttamente nella stringa.
  • Concatenare un numero con & non richiede conversione — VBA lo trasforma automaticamente in testo, quindi puoi unire una variabile numerica direttamente alla stringa.
  • Costruisci tutto in una variabile String (message = ...), poi visualizzala con MsgBox message per verificare che corrisponda esattamente all'output atteso, incluse parentesi e spaziatura.

Oppure usa il seguente codice

Apri Section_2_VBA_Fundamentals.xlsm, premi Alt+F11 e utilizza il modulo su cui stai lavorando per questa cartella di lavoro (inseriscine uno tramite Inserisci → Modulo se non ne hai ancora uno — seguendo lo stesso schema di modIntro nella Sezione 1, puoi chiamarlo modFundamentals).

Sub MonitorArmCheck()
    Dim stock As Integer
    Dim reorderLevel As Integer
    Dim isGettingClose As Boolean
    Dim message As String

    stock = 18
    reorderLevel = 10

    ' Part 1 — the "getting close" check
    isGettingClose = stock <= reorderLevel + 10
    MsgBox isGettingClose

    ' Part 2 — the concatenated message
    message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
    MsgBox message
End Sub

Fai clic in qualsiasi punto all'interno della Sub, poi premi F5. Dovresti vedere comparire due finestre di messaggio una dopo l'altra: prima True (poiché 18 ≤ 20), poi la frase.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2
some-alt