Esercitazione sulle funzioni VBA di Excel: ritorno, chiamata, esempi

โšก Riepilogo intelligente

Una funzione VBA di Excel รจ un blocco di codice che esegue un'attivitร  e restituisce un risultato a chi l'ha richiamata. Questa pagina illustra la sintassi di dichiarazione, la restituzione di un valore, un esempio pratico di addizione e l'utilizzo di una funzione all'interno di una cella di un foglio di lavoro.

  • ๐ŸŽฏ Definizione: Una funzione esegue un compito specifico e restituisce un singolo risultato al codice chiamante.
  • ๐Ÿงพ Sintassi: Nome funzione (argomenti) Come tipo apre il blocco e Fine funzione lo chiude.
  • ๏ธ Restituzione di un valore: Assegna il risultato al nome della funzione, come in addNumbers = primoNumero + secondoNumero.
  • ๐Ÿ”ข Tipo di reso: Dichiarando quanto lungo o quanto Double evita la variante predefinita piรน lenta.
  • ๐Ÿ–ฑ๏ธ Chiamata: Un pulsante di comando inserisce due numeri e visualizza la somma risultante in una finestra di messaggio.
  • ๐Ÿ“Š Utilizzo del foglio di lavoro: Una funzione pubblica in un modulo standard diventa una formula definita dall'utente in qualsiasi cella.

Funzione VBA di Excel

Che cos'รจ una funzione?

Una funzione รจ un pezzo di codice che esegue un'attivitร  specifica e restituisce un risultato. Le funzioni vengono utilizzate principalmente per eseguire attivitร  ripetitive come la formattazione dei dati per l'output, l'esecuzione di calcoli, ecc.

Supponiamo che tu stia sviluppandoping Un programma che calcola gli interessi su un prestito. รˆ possibile creare una funzione che accetta l'importo del prestito e il periodo di rimborso. La funzione puรฒ quindi utilizzare l'importo del prestito e il periodo di rimborso per calcolare gli interessi e restituire il valore.

Perchรฉ utilizzare le funzioni

I vantaggi dell'utilizzo delle funzioni sono gli stessi elencati per le subroutine: suddividono un programma lungo in parti gestibili, possono essere riutilizzate da qualsiasi punto del progetto e un nome descrittivo documenta cosa fa il codice. Tutorial sulle subroutine VBA di Excel copre interamente tali benefici.

Regole di denominazione delle funzioni

Le regole di denominazione sono identiche a quelle per le subroutine. Il nome di una funzione non puรฒ contenere spazi, deve iniziare con una lettera o un trattino basso e non puรฒ essere un tipo riservato. VBA parola chiave come Function, Private o End.

Sintassi VBA per dichiarare la funzione

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

QUI nella sintassi,

Code Action
  • "Funzione privata miaFunzione(...)"
  • Qui la parola chiave "Funzione" viene utilizzata per dichiarare una funzione denominata "miaFunzione" e avviare il corpo della funzione.
  • La parola chiave "Private" viene utilizzata per specificare l'ambito della funzione
  • "ByVal arg1 come numero intero, ByVal arg2 come numero intero"
  • Dichiara due parametri di tipo dati intero denominati 'arg1' e 'arg2'.
  • miaFunzione = arg1 + arg2
  • valuta l'espressione arg1 + arg2 e assegna il risultato al nome della funzione.
  • โ€œFunzione finaleโ€
  • โ€œEnd Functionโ€ viene utilizzato per terminare il corpo della funzione

Come restituire un valore e impostare il tipo di dati della funzione

Una funzione ha un compito che una subroutine non ha: restituisce un valore. Due dettagli controllano quel valore, ed entrambi sono facili da trascurare.

La prima รจ l'assegnazione. VBA non ha l'istruzione Return. Invece si assegna il risultato al nome della funzione stessa, motivo per cui la riga รจ miaFunzione = arg1 + arg2Se tale assegnazione non viene mai eseguita, la funzione restituisce silenziosamente un valore vuoto anzichรฉ generare un errore, quindi ogni ramo del codice deve impostarlo.

Il secondo aspetto riguarda il tipo di ritorno. La dichiarazione sopra riportata termina in corrispondenza della parentesi chiusa, quindi la funzione restituisce un oggetto Variant. L'aggiunta di una clausola As dopo le parentesi corregge il tipo, il che รจ piรน veloce, utilizza meno memoria e consente al compilatore di rilevare un'eventuale incongruenza.

Dichiarazione Resi Quando usarlo
Funzione f(x As Long) Variante Solo quando il tipo di risultato varia effettivamente
Funzione f(x Fintanto) Fintanto Lunghi Numeri interi come conteggi e numeri di riga
Funzione f(x Finchรฉ) Double Double Qualsiasi calcolo che produca numeri decimali
Funzione f(x As Long) As Stringa Corda Testo formattato restituito per la visualizzazione
Funzione f(x As Long) As Boolean Booleano Un controllo di validazione che risponde vero o falso

Suggerimento: Utilizza la funzione Exit per uscire anticipatamente una volta impostato il valore di ritorno, nello stesso modo in cui Exit Sub esce da una subroutine.

Funzione dimostrata con l'esempio:

Le funzioni sono molto simili alla subroutine. La differenza principale tra una subroutine e una funzione รจ che la funzione restituisce un valore quando viene chiamata. Mentre una subroutine non restituisce un valore, quando viene chiamata. Diciamo che vuoi aggiungere due numeri. Puoi creare una funzione che accetta due numeri e restituisce la somma dei numeri.

  1. Creare l'interfaccia utente
  2. Aggiungi la funzione
  3. Scrivi il codice per il pulsante di comando
  4. Testare il codice

Passo 1) Interfaccia utente

Aggiungi un pulsante di comando al foglio di lavoro come mostrato di seguito

Funzioni VBA e subroutine

Impostare le seguenti proprietร  di CommandButton1 come segue.

S / N Controllate Proprietร  Valore
1 PulsanteComando1 Nome btnAggiungiNumbers
2 Didascalia Aggiungi Numbers Funzione

La tua interfaccia ora dovrebbe apparire come segue

Funzioni VBA e subroutine

Passo 2) Codice funzione.

  1. Premi Alt + F11 per aprire la finestra del codice
  2. Aggiungere il seguente codice
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

QUI nel codice,

Code Action
  • โ€œAggiunta funzione privataNumbers(...) "
  • Dichiara una funzione privata โ€œaddNumbersโ€ che accetta due parametri interi.
  • "ByVal firstNumber come numero intero, ByVal secondNumber come numero intero"
  • Dichiara due variabili parametro firstNumber e secondNumber
  • "InserisciNumbers = primoNumero + secondoNumeroโ€
  • Aggiunge i valori firstNumber e secondNumber e assegna la somma da aggiungereNumbers.

Passaggio 3) Scrivere Code che chiama la funzione

  1. Fai clic con il pulsante destro del mouse sul pulsante AggiungiNumbers pulsante di comando
  2. Seleziona Visualizza Code
  3. Aggiungere il seguente codice
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

QUI nel codice,

Code Action
โ€œMonsBox aggiungereNumbers(2,3) "
  • Chiama la funzione aggiungiNumbers e passa 2 e 3 come parametri. La funzione restituisce la somma dei due numeri cinque (5)

Passo 4) Esegui il programma, otterrai i seguenti risultati

Funzioni VBA e subroutine

Scarica Excel contenente il codice sopra

Scarica il file Excel qui sopra Code

Il pulsante qui sopra richiama la funzione dal codice VBA. Una funzione puรฒ essere richiamata anche direttamente dal foglio di lavoro, senza bisogno di alcun pulsante.

Come utilizzare una funzione VBA in una cella di un foglio di lavoro

Una funzione scritta in VBA puรฒ essere digitata in una cella esattamente come SOMMA o CERCA.VERT. Excel la chiama funzione definita dall'utente, o UDF, ed รจ il motivo per cui molte persone imparano le funzioni prima delle subroutine. Devono essere soddisfatte tre condizioni.

  • Inseriscilo in un modulo standard: Inserisci, Modulo nell'editor. Una funzione memorizzata dietro un foglio di lavoro o in ThisWorkbook non รจ visibile nella barra della formula.
  • Dichiaralo pubblico: L'esempio precedente utilizza l'impostazione "Privato", che lo nasconde a Excel. L'impostazione predefinita รจ "Pubblico", quindi รจ sufficiente rimuovere la parola chiave.
  • Restituisci un valore, senza modificare nulla: Una funzione definita dall'utente (UDF) non puรฒ formattare le celle, eliminare righe o scrivere in un'altra cella. Excel blocca queste azioni e la cella visualizza #VALORE!.

La funzione seguente converte una temperatura e puรฒ essere utilizzata in qualsiasi punto del foglio.

Public Function CelsiusToF(ByVal Celsius As Double) As Double
    CelsiusToF = (Celsius * 9 / 5) + 32
End Function

Salva la cartella di lavoro come file .xlsm con macro abilitate, quindi digita =CelsiusToF(A1) in qualsiasi cella. Il risultato si aggiorna ogni volta che A1 cambia e il nome appare nell'elenco di completamento automatico delle formule nella categoria Definite dall'utente. Poichรฉ la cartella di lavoro ora contiene macro, chiunque la apra deve abilitare il contenuto prima che la formula restituisca un valore anzichรฉ #NOME?.

Errori comuni delle funzioni VBA e come risolverli

Quattro problemi spiegano la maggior parte delle funzioni che vengono compilate ma restituiscono un risultato errato.

  • La funzione restituisce Vuoto o 0: Il risultato non รจ mai stato assegnato al nome della funzione, oppure un ramo di un'istruzione If salta l'assegnazione. Imposta il valore di ritorno su ogni percorso.
  • #NOME? nella cella del foglio di lavoro: La funzione รจ privata, si trova in un modulo di foglio di calcolo anzichรฉ in un modulo standard, oppure la cartella di lavoro รจ stata salvata senza le macro abilitate.
  • Overflow con argomenti interi: L'esempio utilizza il tipo Integer, che si ferma a 32,767. Per dati reali, modificare entrambi i parametri e il tipo di ritorno in Long.
  • Un argomento modificato coglie di sorpresa chi chiama: Omettendo ByVal, VBA passa direttamente la variabile, consentendo alla funzione di modificarne il valore. Scrivere ByVal a meno che non si desideri tale effetto.

DOMANDE FREQUENTI

Non direttamente. Restituisci un array o un tipo personalizzato per contenere piรน valori in un unico risultato, oppure dichiara i parametri aggiuntivi tramite riferimento (ByRef) in modo che la funzione scriva nelle variabili del chiamante.

Aggiungi la parola chiave Optional con un valore predefinito, come in Optional ByVal Rate As Double = 0.05. Ogni parametro successivo a uno opzionale deve essere anch'esso opzionale e deve trovarsi alla fine dell'elenco.

Sรฌ, tramite Application.WorksheetFunction, ad esempio Application.WorksheetFunction.Sum(Range("A1:A10")). Le funzioni giร  fornite da VBA, come Left o Trim, vengono chiamate direttamente senza quel prefisso.

Sรฌ. Incolla la formula del foglio di calcolo e un assistente basato sull'IA restituirร  una funzione pubblica equivalente con argomenti denominati e un tipo di ritorno dichiarato. Confronta entrambi i risultati su righe di esempio prima di sostituire la formula.

Sรฌ. Basta fornire la funzione e la formula e un assistente basato sull'intelligenza artificiale indicherร  le cause, come ad esempio un'incongruenza nel tipo di argomento, un'assegnazione di ritorno mancante o un tentativo di modificare una cella dall'interno di una funzione definita dall'utente.

Riassumi questo post con: