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
- 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.
- Costruisci un messaggio concatenato: "Monitor Arm è a 18 unità (riordino a 10)" usando variabili, non testo fisso.
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 + 10prima di eseguire il codice, così saprai se18 <= 20deve restituireTrueoFalse, 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
18e il10nel messaggio finale devono provenire dalle variabili di giacenza ereorderLevel, 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 conMsgBox messageper 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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
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
- 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.
- Costruisci un messaggio concatenato: "Monitor Arm è a 18 unità (riordino a 10)" usando variabili, non testo fisso.
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 + 10prima di eseguire il codice, così saprai se18 <= 20deve restituireTrueoFalse, 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
18e il10nel messaggio finale devono provenire dalle variabili di giacenza ereorderLevel, 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 conMsgBox messageper 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.
Grazie per i tuoi commenti!