Sommario
Continuiamo la serie di esercitazioni sulle funzioni definite dall'utente. Negli articoli precedenti abbiamo fatto conoscenza con le funzioni personalizzate e abbiamo imparato a crearle e a usarle. In questo manuale esamineremo le caratteristiche specifiche dell'uso di queste funzioni e vedremo le differenze tra le UDF e le macro di VBA.
In questa esercitazione impareremo quanto segue:
Ci auguriamo che questo articolo possa migliorare la vostra conoscenza delle UDF e aiutarvi a utilizzarle in modo ancora più efficace nelle vostre cartelle di lavoro di Excel.
UDF e Macro sono la stessa cosa?
Sia le funzioni definite dall'utente che le macro VBA vengono create con l'editor VBA. Qual è la differenza tra loro e a cosa dare la preferenza?
La differenza più importante è che la funzione esegue il calcolo, mentre la macro esegue un'azione. Una funzione definita dall'utente, come una normale funzione di Excel, deve essere scritta in una cella. Come risultato della sua esecuzione, la cella restituisce un valore. Allo stesso tempo, non è possibile modificare i valori di altre celle, così come alcune proprietà della cella corrente (in particolare,Tuttavia, è possibile utilizzare una funzione personalizzata nelle formule di formattazione condizionale.
Le UDF e le macro VBA funzionano in modo diverso. Ad esempio, quando si crea una UDF nell'editor di Visual Basic, si inizia con l'istruzione Funzione e terminare con un Fine della funzione Quando si registra una macro, si inizia con un'affermazione Sub e terminare con un Fine Sub.
Non tutti gli operatori di Visual Basic possono essere utilizzati per creare UDF. Per questo motivo, una macro è una soluzione più versatile.
Una macro non richiede all'utente di passare alcun argomento (né può accettarne), a differenza di una funzione definita dall'utente.
Il punto è che alcuni comandi delle macro possono utilizzare indirizzi di celle o elementi di formattazione (ad esempio, il colore). Se spostate le celle, aggiungete o rimuovete righe e colonne, cambiate il formato delle celle, potete facilmente "rompere" le vostre macro. Questo è particolarmente possibile se condividete il vostro file con colleghi che non conoscono il funzionamento delle vostre macro.
Ad esempio, si dispone di un file con una macro perfettamente funzionante. Questa formula calcola la percentuale delle celle da A1 ad A4. La macro cambia il colore di queste celle in giallo. Nella cella attiva viene impostato un formato percentuale.
Se voi o qualcun altro decidete di inserire una nuova riga, la macro continuerà a cercare il valore nella cella A4 (il parametro 4,1 della vostra UDF), fallendo e restituendo un errore:
In questo caso, l'errore si è verificato a causa della divisione per zero (nessun valore in una riga appena aggiunta). Se la macro esegue, ad esempio, una somma, si otterrà semplicemente un risultato errato, ma senza saperlo.
A differenza delle macro, le funzioni definite dall'utente non possono causare una situazione così spiacevole.
Di seguito sono riportate le prestazioni degli stessi calcoli utilizzando una UDF. In questo caso è possibile specificare le celle di input in qualsiasi punto del foglio di lavoro e non si verificheranno problemi imprevisti durante la modifica.
Ho scritto la seguente formula in C3:
=UDF_vs_Macro(A1,A4)
Poi ho inserito una riga vuota e la formula è cambiata, come si può vedere nella schermata precedente.
Ora è possibile spostare ovunque una cella di input o una cella con una funzione. Il risultato sarà sempre corretto.
Un ulteriore vantaggio dell'utilizzo delle UDF è che si aggiornano automaticamente quando il valore nella cella di input cambia. Quando si utilizzano le macro, è necessario assicurarsi che tutti i dati siano aggiornati.
Tenendo presente questo esempio, preferirei utilizzare le UDF ogni volta che è possibile e usare le macro solo per altre attività non di calcolo.
Limitazioni e svantaggi dell'utilizzo di UDF
Ho già menzionato i vantaggi dell'UDF in precedenza. Per farla breve, è in grado di eseguire calcoli che non sono possibili con le funzioni standard di Excel. Inoltre, può salvare e utilizzare formule lunghe e complesse, trasformandole in un'unica funzione. E non dovrete scrivere formule complicate più e più volte.
Parliamo ora in modo più dettagliato delle carenze dell'UDF:
- La creazione di UDF richiede l'uso di VBA. Non c'è modo di evitarlo. Ciò significa che l'utente non può registrare l'UDF allo stesso modo di una macro di Excel. Dovete creare voi stessi l'UDF. Tuttavia, potete copiare e incollare nella vostra funzione parti del codice della macro precedentemente registrato. Dovete solo essere consapevoli delle limitazioni delle funzioni personalizzate.
- Un altro svantaggio delle UDF è che, come qualsiasi altra funzione di Excel, possono restituire solo un singolo valore o una matrice di valori in una cella. Eseguono semplicemente dei calcoli, niente di più.
- Se si desidera condividere la cartella di lavoro con i colleghi, assicurarsi di salvare le UDF nello stesso file, altrimenti le funzioni personalizzate non funzioneranno per loro.
- Le funzioni personalizzate create con l'editor VBA sono più lente delle funzioni normali. Questo è particolarmente evidente nelle tabelle di grandi dimensioni. Purtroppo, VBA è un linguaggio di programmazione molto lento. Pertanto, se avete molti dati, cercate di utilizzare le funzioni standard ogni volta che è possibile o di creare UDF utilizzando la funzione LAMBDA.
Limitazioni delle funzioni personalizzate:
- Le UDF sono progettate per eseguire calcoli e restituire un valore. Non possono essere utilizzate al posto delle macro.
- Non possono modificare il contenuto di altre celle (solo della cella attiva).
- I nomi delle funzioni devono seguire determinate regole. Ad esempio, non è possibile utilizzare un nome che corrisponda al nome di una funzione nativa di Excel o a un indirizzo di cella, come AB123.
- La funzione personalizzata non può contenere spazi nel nome, ma può includere il carattere di sottolineatura. Tuttavia, il metodo preferito è quello di utilizzare le lettere maiuscole all'inizio di ogni nuova parola (ad esempio, GetMaxBetween).
- Una UDF non può copiare e incollare celle in altre aree del foglio di lavoro.
- Non possono modificare il foglio di lavoro attivo.
- Le UDF non possono modificare la formattazione della cella attiva. Se si desidera modificare la formattazione di una cella quando vengono visualizzati valori diversi, è necessario utilizzare la formattazione condizionale.
- Non possono aprire altri libri.
- Non possono essere utilizzati per eseguire macro utilizzando Application.OnTime.
- Non è possibile creare una funzione definita dall'utente utilizzando il registratore di macro.
- Le funzioni non appaiono nella sezione Sviluppatore> Macro dialogo.
- Le funzioni appariranno nella finestra di dialogo ( Inserisci> Funzione ) e nell'elenco delle funzioni solo se sono dichiarate come Pubblico (è l'impostazione predefinita, se non diversamente indicato).
- Qualsiasi funzione dichiarata come Privato non apparirà nell'elenco delle funzioni.
Un funzionamento piuttosto lento, così come alcune restrizioni nell'uso, possono far pensare: "A cosa servono queste funzioni personalizzate?".
Possono essere utili, e lo sono se si tiene conto dei vincoli imposti. Se si impara a creare e utilizzare correttamente le UDF, si può scrivere la propria libreria di funzioni, ampliando così notevolmente la propria capacità di lavorare con i dati in Excel.
Per quanto mi riguarda, le funzioni personalizzate sono un grande risparmio di tempo. E voi? Avete già provato a creare la vostra UDF? Vi è piaciuta di più delle funzioni di base di Excel? Discutiamone nei commenti :)