Aggiunta automatica del 20% a una voce (Microsoft Excel)
Julie vorrebbe avere alcune celle di input su un foglio di lavoro che, quando qualcuno inserisce un valore, aggiungono automaticamente il 20% a tutto ciò che è stato inserito.
Ad esempio, se qualcuno inserisce 200 in una di queste celle, ciò che viene effettivamente inserito è 240.
Esistono molti modi in cui puoi affrontare questa attività utilizzando le macro.
L’approccio migliore è creare una macro che viene eseguita, automaticamente, quando una cella viene modificata nel foglio di lavoro. È quindi possibile verificare se la modifica è stata apportata in una delle celle di input e regolare i valori di conseguenza.
L’esempio seguente modifica il valore immesso se è stato creato in una delle tre celle: A1, C3 o B8.
Private Sub Worksheet_Change(ByVal Target As Range) Dim rInput As Range Dim rInt As Range Dim rCell As Range 'change the input cell range as desired Set rInput = Range("A1, C3, B8") Set rInt = Intersect(Target, rInput) If Not rInt Is Nothing Then For Each rCell In rInt If IsNumeric(rCell) Then With Application .EnableEvents = False rCell = rCell * 1.2 .EnableEvents = True End With End If Next End If End Sub
Ricorda che questo è un gestore di eventi, il che significa che viene attivato (in questo caso) ogni volta che qualcosa cambia nel foglio di lavoro. Per utilizzare questa macro, fare clic con il pulsante destro del mouse sulla scheda del foglio di lavoro e scegliere Visualizza codice dal menu contestuale risultante. Excel visualizza l’editor VB ed è quindi possibile aggiungere il codice Worksheet_Change.
Si noti che la chiave per capire se la modifica è stata eseguita in una delle tre celle di input definite è la funzione Interseca. Verifica se esiste un’intersezione tra l’intervallo di destinazione (le celle modificate che hanno attivato il gestore Worksheet_Change) e l’intervallo rInput (le celle di input). Se è presente, rInt conterrebbe le celle che si sono intersecate.
La macro quindi attraversa quelle celle e, se le celle contengono valori numerici, moltiplica quelle celle del 120%. (Moltiplicare per 120% equivale ad aumentare il valore del 20%.) Notare che la proprietà .EnableEvents è impostata su False quando viene eseguita la moltiplicazione; se questa protezione non venisse adottata, ogni moltiplicazione attiverebbe nuovamente questo gestore di eventi e moltiplicheresti ripetutamente (e per sempre) il valore della cella del 120%.
Se si desidera effettivamente eseguire qualche altra elaborazione sui valori, ad esempio l’arrotondamento a un numero specifico di punti decimali oa un valore intero, è sufficiente apportare una modifica alla singola riga che esegue effettivamente la moltiplicazione.
Se le celle di input si trovano in un’area contigua, un approccio migliore potrebbe essere quello di definire tali celle di input come intervallo denominato e quindi utilizzare tale intervallo denominato all’interno della macro per determinare l’intersezione delle celle modificate. In questo modo non è necessario modificare la macro quando o se il tuo gruppo di celle di input cambia.
Per utilizzare questo approccio, supponiamo che il tuo intervallo di celle di input sia B7: B19. Seleziona quelle celle e quindi, utilizzando la casella del nome nell’angolo superiore sinistro dell’area delle celle, inserisci il nome “plus20pct”. Questa azione assegna il nome all’intervallo. È quindi possibile utilizzare quel nome all’interno della macro.
Private Sub Worksheet_Change(ByVal Target As Range) Dim rInt As Range Dim rCell As Range 'change the input cell range as desired Set rInt = Intersect(Target, Range("plus20pct")) If Not rInt Is Nothing Then For Each rCell In rInt If IsNumeric(rCell) Then With Application .EnableEvents = False rCell = rCell * 1.2 .EnableEvents = True End With End If Next End If End Sub
Si noti che l’unico cambiamento è nel modo in cui viene determinata l’intersezione delle celle: la funzione Interseca utilizza l’intervallo “plus20pct” come parametro. Tutto il resto funziona come prima.
Ora che hai visto come farlo usando le macro, resta la domanda se dovresti davvero farlo usando le macro. Innanzitutto, ci sono dei limiti a ciò che possono fare queste macro. Ad esempio, cosa succede se l’utente inserisce una data o un’ora in una delle celle di input? Internamente, Excel gestisce le date e le ore come numeri, il che significa che anche loro sarebbero aumentate del 20%.
In secondo luogo, è necessario considerare cosa accade al foglio di lavoro se qualcuno modifica la struttura del foglio di lavoro aggiungendo o eliminando righe o colonne.
Le macro utilizzano riferimenti di cella assoluti (A1, C3 e B8) o un intervallo denominato (plus20pct). Sebbene l’intervallo denominato possa essere regolato dall’aggiunta o dall’eliminazione di righe o colonne, i riferimenti assoluti delle celle non cambierebbero. Quindi, potresti finire con il controllo (e la regolazione) della macro
celle che non sono più le celle di immissione dati previste.
Terzo, supponiamo che qualcuno inserisca un valore (200) in una delle tue celle di input. Viene automaticamente aumentato del 20% e diventa 240. La persona vede questo cambiamento e si è chiesto cosa sia successo, quindi seleziona la cella e preme F2 per iniziare a modificare la cella. Prima di apportare la modifica, ricordano che “Oh, sì, dovrebbe aumentare automaticamente del 20%”. Quindi, premono semplicemente Invio per accettare il valore 240.
Tuttavia, Excel vede questo come un cambiamento e aumenta il 240 del 20%, risultando in 288, non ciò che tu o l’utente intendevi.
Questa seconda considerazione, la confusione dell’utente, è il più grande problema potenziale con la modifica automatica di ciò che un utente inserisce nel foglio di lavoro. Un approccio meno confuso sarebbe quello di avere un’area di input ben definita per la cartella di lavoro. L’utente inserisce le cifre nell’area di immissione e quelle cifre rimangono mentre le inseriscono. Quindi, in altre celle o nelle tue formule, esegui la regolazione del 20%.
Questo approccio progettuale (modifica della struttura del foglio di lavoro per un facile inserimento dei dati) è potenzialmente meno confuso per l’utente rispetto alla modifica automatica di ciò che ha inserito in una cella del foglio di lavoro. Elimina anche un rischio inerente a qualsiasi cartella di lavoro abilitata per le macro: l’utente può caricare la cartella di lavoro senza abilitare le macro, assicurandosi così che le cifre non siano regolate come previsto.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (12684) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.