Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Utilizzo delle funzioni integrate | Fondamenti Di VBA
Excel VBA per l'Automazione Aziendale

Utilizzo delle funzioni integrate

Scorri per mostrare il menu

VBA include diverse centinaia di funzioni integrate, e la maggior parte di esse non verrà mai utilizzata. Quelle elencate di seguito sono tra le più frequenti nell'automazione aziendale — per la pulizia del testo, la gestione delle date e la conversione dei tipi.

Funzioni per le Date

Debug.Print Now()                    ' current date and time
Debug.Print Date                     ' today's date only
Debug.Print DateAdd("d", 30, Date)   ' 30 days from today
Debug.Print DateDiff("d", #01/09/2023#, Date)  ' days since hire date
Debug.Print Format(Date, "dd/mm/yyyy")

Now() e Date sembrano simili ma rispondono a domande diverse — Now() include l'orario corrente fino al secondo (utile per registrare quando è stata eseguita una macro), mentre Date restituisce solo il giorno del calendario, ideale per tutto ciò che riguarda scadenze o età. DateAdd e DateDiff sono l'uno il complemento dell'altro: DateAdd proietta avanti o indietro da una data di una determinata unità ("d" per giorni, ma funzionano anche "m" per mesi e "yyyy" per anni), mentre DateDiff misura l'intervallo tra due date esistenti.

Note
Nota

I letterali di data in VBA — qualsiasi cosa scritta tra i simboli #, come #01/09/2023# — utilizzano sempre l'ordine MM/DD/YYYY internamente, indipendentemente dalle impostazioni locali o regionali di Windows. Quindi #01/09/2023# significa 9 gennaio 2023, non 1 settembre, anche per chi normalmente usa il formato data GG/MM/AAAA. Questo è diverso da come vengono inserite le date nelle celle del foglio di lavoro, dove le impostazioni regionali hanno effetto — il formato letterale #...# è una regola specifica di VBA che rimane fissa ovunque venga eseguito il codice.

Funzioni Testuali

Debug.Print UCase("wireless mouse")     ' WIRELESS MOUSE
Debug.Print LCase("WIRELESS MOUSE")     ' wireless mouse
Debug.Print Left("P001", 1)             ' P
Debug.Print Right("P001", 3)            ' 001
Debug.Print Mid("P001", 2, 3)           ' 001
Debug.Print Trim("  Keyboard  ")        ' Keyboard
Debug.Print Len("Laptop Stand")         ' 12
Debug.Print InStr("Wireless Mouse", "Mouse")  ' 10 (position found)

UCase e LCase sono utili per rendere un confronto insensibile alle maiuscole/minuscole, ad esempio, If UCase(category) = UCase("electronics") Then funziona indipendentemente da come è stata digitata originariamente la categoria. Left, Right e Mid estraggono una parte di una stringa, differendo solo dal punto di partenza: Left e Right contano dai due estremi, mentre Mid prende una posizione iniziale e una lunghezza, motivo per cui Mid("P001", 2, 3) e Right("P001", 3) restituiscono la stessa cosa in questo caso — "P001" ha solo un carattere di prefisso numerico, quindi "a partire dalla posizione 2" e "gli ultimi 3 caratteri" individuano la stessa sottostringa. Trim rimuove silenziosamente gli spazi iniziali e finali — una funzione poco appariscente che risolve molti problemi quando i dati sono stati copiati e incollati da fonti con spaziatura incoerente. InStr cerca una stringa all'interno di un'altra e restituisce la posizione in cui viene trovata (o 0 se non viene trovata), utile per verificare "questo nome prodotto contiene la parola Mouse?" senza richiedere una corrispondenza esatta.

Funzioni Numeriche

Debug.Print Round(24.996, 2)   ' 25
Debug.Print Abs(-15)           ' 15
Debug.Print Int(7.9)           ' 7

Round e Int riducono entrambi un numero, ma in modo diverso — Round(24.996, 2) arrotonda al valore più vicino con 2 decimali (25.00, che viene visualizzato come 25), mentre Int(7.9) tronca sempre verso lo zero indipendentemente da quanto il decimale sia vicino all'arrotondamento, restituendo 7 invece di 8. Confondere queste due funzioni è una causa comune di errori nei prezzi: arrotondare un prezzo al centesimo più vicino dovrebbe quasi sempre usare Round, non Int, altrimenti si rischia di sottocaricare sistematicamente di una frazione di centesimo ogni transazione.

Conversione di Tipo

Fondamentale quando si estraggono valori da un foglio di lavoro, poiché i valori delle celle spesso arrivano come Variant:

Dim priceText As String
priceText = "39.50"
Dim price As Double
price = CDbl(priceText)     ' text → number
 
Dim stockValue As Variant
stockValue = "44"
Dim stockCount As Integer
stockCount = CInt(stockValue)

CDbl converte in Double, CInt in Integer, CStr converte in String e CDate converte in un valore Date corretto.

Perché non lasciare che VBA converta automaticamente quando necessario? Di solito lo fa, ma affidarsi a questo comportamento è rischioso: una cella che sembra un numero ma in realtà è stata digitata o importata come testo può causare il fallimento di un confronto If o di un'operazione aritmetica, oppure comportarsi in modo inatteso, mentre la conversione esplicita permette di intercettare subito l'errore, esattamente nella riga in cui si trova il dato errato invece che tre passaggi dopo.

Attività

  1. Scrivere una riga che estragga solo la parte numerica di "P003" usando Mid (suggerimento: inizia dalla posizione 2).
  2. Scrivere una riga che converta il testo estratto in un numero reale con CInt o CLng.
  3. Utilizzare DateDiff per calcolare quanti giorni fa Emma Davis è stata assunta (15/03/2020) rispetto a oggi.
Suggerimento
expand arrow

1. Estrazione della parte numerica

  • Mid richiede tre elementi: la stringa stessa, da dove iniziare a contare e quanti caratteri prendere.
  • "P003" ha una lettera seguita da tre cifre — si desidera saltare la "P" e prendere tutto ciò che segue.
  • La posizione di partenza 2 significa "inizia dal secondo carattere" — conta "P003" sulle dita per confermare che la posizione 2 è il primo "0".

2. Conversione in un numero reale

  • Qualunque cosa restituisca Mid è ancora testo, anche se sembra un numero.
  • Racchiudere l'intera espressione Mid(...) dentro CInt(...) o CLng(...) — si sta convertendo il risultato di una funzione usando un'altra.
  • Promemoria dal capitolo precedente: CInt/CLng convertono il testo in un numero intero; utilizzare CLng se non si è sicuri che il numero possa essere grande.

3. Giorni dalla data di assunzione

  • DateDiff richiede tre elementi: l'unità di misura ("d" per giorni), una data di inizio e una data di fine.
  • La parte complicata è scrivere una data letterale in VBA — racchiuderla tra simboli #, come #03/15/2020#. All'interno di #...#, VBA si aspetta sempre l'ordine mese/giorno/anno, indipendentemente dalle impostazioni locali — quindi 15 marzo è #03/15/2020#, non #15/03/2020#.
  • Per "oggi", non è necessario digitare una data — c'è una parola chiave dalla sezione 2.3 che restituisce sempre la data corrente.
  • Inserire queste due date in DateDiff nell'ordine corretto — prima la data precedente — altrimenti si otterrà un numero negativo.
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Utilizzo delle funzioni integrate

VBA include diverse centinaia di funzioni integrate, e la maggior parte di esse non verrà mai utilizzata. Quelle elencate di seguito sono tra le più frequenti nell'automazione aziendale — per la pulizia del testo, la gestione delle date e la conversione dei tipi.

Funzioni per le Date

Debug.Print Now()                    ' current date and time
Debug.Print Date                     ' today's date only
Debug.Print DateAdd("d", 30, Date)   ' 30 days from today
Debug.Print DateDiff("d", #01/09/2023#, Date)  ' days since hire date
Debug.Print Format(Date, "dd/mm/yyyy")

Now() e Date sembrano simili ma rispondono a domande diverse — Now() include l'orario corrente fino al secondo (utile per registrare quando è stata eseguita una macro), mentre Date restituisce solo il giorno del calendario, ideale per tutto ciò che riguarda scadenze o età. DateAdd e DateDiff sono l'uno il complemento dell'altro: DateAdd proietta avanti o indietro da una data di una determinata unità ("d" per giorni, ma funzionano anche "m" per mesi e "yyyy" per anni), mentre DateDiff misura l'intervallo tra due date esistenti.

Note
Nota

I letterali di data in VBA — qualsiasi cosa scritta tra i simboli #, come #01/09/2023# — utilizzano sempre l'ordine MM/DD/YYYY internamente, indipendentemente dalle impostazioni locali o regionali di Windows. Quindi #01/09/2023# significa 9 gennaio 2023, non 1 settembre, anche per chi normalmente usa il formato data GG/MM/AAAA. Questo è diverso da come vengono inserite le date nelle celle del foglio di lavoro, dove le impostazioni regionali hanno effetto — il formato letterale #...# è una regola specifica di VBA che rimane fissa ovunque venga eseguito il codice.

Funzioni Testuali

Debug.Print UCase("wireless mouse")     ' WIRELESS MOUSE
Debug.Print LCase("WIRELESS MOUSE")     ' wireless mouse
Debug.Print Left("P001", 1)             ' P
Debug.Print Right("P001", 3)            ' 001
Debug.Print Mid("P001", 2, 3)           ' 001
Debug.Print Trim("  Keyboard  ")        ' Keyboard
Debug.Print Len("Laptop Stand")         ' 12
Debug.Print InStr("Wireless Mouse", "Mouse")  ' 10 (position found)

UCase e LCase sono utili per rendere un confronto insensibile alle maiuscole/minuscole, ad esempio, If UCase(category) = UCase("electronics") Then funziona indipendentemente da come è stata digitata originariamente la categoria. Left, Right e Mid estraggono una parte di una stringa, differendo solo dal punto di partenza: Left e Right contano dai due estremi, mentre Mid prende una posizione iniziale e una lunghezza, motivo per cui Mid("P001", 2, 3) e Right("P001", 3) restituiscono la stessa cosa in questo caso — "P001" ha solo un carattere di prefisso numerico, quindi "a partire dalla posizione 2" e "gli ultimi 3 caratteri" individuano la stessa sottostringa. Trim rimuove silenziosamente gli spazi iniziali e finali — una funzione poco appariscente che risolve molti problemi quando i dati sono stati copiati e incollati da fonti con spaziatura incoerente. InStr cerca una stringa all'interno di un'altra e restituisce la posizione in cui viene trovata (o 0 se non viene trovata), utile per verificare "questo nome prodotto contiene la parola Mouse?" senza richiedere una corrispondenza esatta.

Funzioni Numeriche

Debug.Print Round(24.996, 2)   ' 25
Debug.Print Abs(-15)           ' 15
Debug.Print Int(7.9)           ' 7

Round e Int riducono entrambi un numero, ma in modo diverso — Round(24.996, 2) arrotonda al valore più vicino con 2 decimali (25.00, che viene visualizzato come 25), mentre Int(7.9) tronca sempre verso lo zero indipendentemente da quanto il decimale sia vicino all'arrotondamento, restituendo 7 invece di 8. Confondere queste due funzioni è una causa comune di errori nei prezzi: arrotondare un prezzo al centesimo più vicino dovrebbe quasi sempre usare Round, non Int, altrimenti si rischia di sottocaricare sistematicamente di una frazione di centesimo ogni transazione.

Conversione di Tipo

Fondamentale quando si estraggono valori da un foglio di lavoro, poiché i valori delle celle spesso arrivano come Variant:

Dim priceText As String
priceText = "39.50"
Dim price As Double
price = CDbl(priceText)     ' text → number
 
Dim stockValue As Variant
stockValue = "44"
Dim stockCount As Integer
stockCount = CInt(stockValue)

CDbl converte in Double, CInt in Integer, CStr converte in String e CDate converte in un valore Date corretto.

Perché non lasciare che VBA converta automaticamente quando necessario? Di solito lo fa, ma affidarsi a questo comportamento è rischioso: una cella che sembra un numero ma in realtà è stata digitata o importata come testo può causare il fallimento di un confronto If o di un'operazione aritmetica, oppure comportarsi in modo inatteso, mentre la conversione esplicita permette di intercettare subito l'errore, esattamente nella riga in cui si trova il dato errato invece che tre passaggi dopo.

Attività

  1. Scrivere una riga che estragga solo la parte numerica di "P003" usando Mid (suggerimento: inizia dalla posizione 2).
  2. Scrivere una riga che converta il testo estratto in un numero reale con CInt o CLng.
  3. Utilizzare DateDiff per calcolare quanti giorni fa Emma Davis è stata assunta (15/03/2020) rispetto a oggi.
Suggerimento
expand arrow

1. Estrazione della parte numerica

  • Mid richiede tre elementi: la stringa stessa, da dove iniziare a contare e quanti caratteri prendere.
  • "P003" ha una lettera seguita da tre cifre — si desidera saltare la "P" e prendere tutto ciò che segue.
  • La posizione di partenza 2 significa "inizia dal secondo carattere" — conta "P003" sulle dita per confermare che la posizione 2 è il primo "0".

2. Conversione in un numero reale

  • Qualunque cosa restituisca Mid è ancora testo, anche se sembra un numero.
  • Racchiudere l'intera espressione Mid(...) dentro CInt(...) o CLng(...) — si sta convertendo il risultato di una funzione usando un'altra.
  • Promemoria dal capitolo precedente: CInt/CLng convertono il testo in un numero intero; utilizzare CLng se non si è sicuri che il numero possa essere grande.

3. Giorni dalla data di assunzione

  • DateDiff richiede tre elementi: l'unità di misura ("d" per giorni), una data di inizio e una data di fine.
  • La parte complicata è scrivere una data letterale in VBA — racchiuderla tra simboli #, come #03/15/2020#. All'interno di #...#, VBA si aspetta sempre l'ordine mese/giorno/anno, indipendentemente dalle impostazioni locali — quindi 15 marzo è #03/15/2020#, non #15/03/2020#.
  • Per "oggi", non è necessario digitare una data — c'è una parola chiave dalla sezione 2.3 che restituisce sempre la data corrente.
  • Inserire queste due date in DateDiff nell'ordine corretto — prima la data precedente — altrimenti si otterrà un numero negativo.
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 3
some-alt