Aggiungendo automaticamente il 20% di una voce

Julie vorrebbe avere alcune cellule di ingresso su un foglio di lavoro che, quando qualcuno entra in un valore, aggiungere automaticamente il 20% di tutto ciò che è stato inserito. Per esempio, se qualcuno entra 200 in una di queste cellule, ciò che è effettivamente inserito è 240.

Ci sono una moltitudine di modi per affrontare questo compito con le macro. L'approccio migliore è quello di creare una macro che viene eseguita, automaticamente, quando una cellula si modifica nel foglio di lavoro. È quindi possibile verificare se il cambiamento è stato fatto in una delle celle di input e regolare i valori di conseguenza. L'esempio seguente modifica il valore immesso se è proposta in uno dei tre celle: A1, C3 o B8.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim Ringresso come gamma
Dim Rint come gamma
Dim RCELL come gamma

'Modificare l'intervallo di celle ingresso come desiderato
Set Ringresso = Range ("A1, C3, B8")

Set Rint = Intersect (Target, Ringresso)
Se non Rint è niente allora
Per ogni RCELL In Rint
Se IsNumeric (RCELL) Poi
Con Application
.EnableEvents = False
RCELL = RCELL * 1.2
.EnableEvents = True
End With
End If
Il Prossimo
End If
End Sub

Ricordate 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 poter utilizzare questa macro, fare clic destro sulla scheda foglio di lavoro e scegliere Visualizza codice dal menu contestuale risultante. Excel visualizza l'Editor VB e quindi è possibile aggiungere il codice Worksheet_Change.

Si noti che la chiave per capire se il cambiamento è stato fatto in una delle tre celle di input definiti è la funzione Intersezione. Si verifica se vi è un incrocio tra il campo di destinazione (le cellule modificate che hanno attivato il gestore Worksheet_Change) e la gamma Ringresso (le cellule di ingresso). Se esiste, allora Rint conterrebbe le cellule che hanno intersecano.

La macro poi i passaggi attraverso le cellule e, se le celle contengono valori numerici, moltiplica le cellule del 120%. (Moltiplicando per 120% è lo stesso aumentando il valore del 20%.) Si noti che la proprietà .EnableEvents è False quando la moltiplicazione avviene; se questa salvaguardia non sono state prese, quindi ogni moltiplicazione innescherebbe di nuovo questo gestore di eventi e si sarebbe ripetutamente (e per sempre) moltiplicare il valore della cella del 120%.

Se si voleva fare in realtà qualche altro trattamento per i valori, ad esempio arrotondamento a un numero specifico di punti decimali o per un intero valore, allora semplicemente bisogno di fare una modifica alla linea singola che in realtà fa la moltiplicazione.

Se le celle di input sono in una zona contigua, un approccio migliore potrebbe essere quella di definire tali celle di input come un intervallo denominato, e quindi utilizzare tale intervallo denominato nella macro per determinare l'intersezione delle celle modificate. In questo modo non è necessario modificare la macro quando o se il gruppo di celle di ingresso cambia.

Per utilizzare questo approccio, diciamo che la vostra gamma di celle di input è B7: B19. Selezionare le cellule e poi, utilizzando la casella Nome nell'angolo superiore sinistro dell'area di celle, inserite il nome "plus20pct". Questa azione assegna il nome alla gamma. È quindi possibile utilizzare tale nome all'interno della macro.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim Rint come gamma
Dim RCELL come gamma

'Modificare l'intervallo di celle ingresso come desiderato

Set Rint = Intersect (Target, Range ("plus20pct"))
Se non Rint è niente allora
Per ogni RCELL In Rint
Se IsNumeric (RCELL) Poi
Con Application
.EnableEvents = False
RCELL = RCELL * 1.2
.EnableEvents = True
End With
End If
Il Prossimo
End If
End Sub

Si noti che l'unico cambiamento è nel modo in cui l'intersezione delle celle viene determinata la funzione Intersezione utilizza l'intervallo "plus20pct" come parametro. Tutto il resto funziona come prima.

Ora che avete visto come farlo utilizzando le macro, la domanda rimane, come se si dovrebbe davvero fare con le macro. In primo luogo, ci sono limiti a ciò che possono fare queste macro. Ad esempio, cosa succede se l'utente immette una data o ora in una delle celle di input? Internamente, Excel gestisce le date e gli orari come numeri, il che significa che anche loro, sarebbero aumentati del 20%.

In secondo luogo, è necessario considerare che cosa succede al tuo foglio di lavoro se qualcuno modifica la struttura del foglio di lavoro aggiungendo o delting righe o colonne. Le macro sono utilizzando riferimenti assoluti di cella (A1, C3, e B8) o un intervallo denominato (plus20pct). Mentre l'intervallo denominato può essere regolata per riga o colonna aggiunta o soppressione, le cellule assoluti riferimenti non cambierebbe. Quindi, si potrebbe finire con il controllo macro (e la regolazione), le cellule che non sono più le cellule di immissione dati previsti.

In terzo luogo, diciamo che qualcuno entra in un valore (200) in una delle sue celle di input. E 'aumentato del 20% e diventa 240. La persona vede questo cambiamento e si chiese che cosa è successo, in modo da selezionare la cella e premere F2 per iniziare a modificare la cella. Prima di fare il cambiamento, si ricordano che "Oh, sì, ma si suppone di aumentare del 20% automaticamente." Così, semplicemente premere Invio per accettare il valore 240. Tuttavia, Excel vede questo come un cambiamento e aumenta la 240 del 20%, con conseguente 288-non è quello che o l'utente previsto.

Questa seconda considerazione-user-confusione è il più grande potenziale problema con la modifica automaticamente ciò che un utente digita nel foglio di lavoro. Un approccio meno confusione sarebbe di avere un campo d'ingresso ben definito per la cartella di lavoro. L'utente mette figure nella zona di ingresso e di quelle figure rimangono come ingresso di loro. Quindi, in altre cellule o nelle formule, si fa la regolazione del 20%.

Questo approccio progettuale (modificando il disegno foglio di lavoro per un facile inserimento dei dati) è potenzialmente meno confusione per l'utente di cambiare automaticamente quanto sono entrati in una cella del foglio di lavoro. Ottiene anche eliminare il rischio che è inerente a qualsiasi macro-enabled lavoro-all'utente potrebbe caricare la cartella di lavoro senza le macro che permettono, in modo da garantire che i dati non sono regolati come desiderato.

ExcelTips è la vostra fonte per la formazione Microsoft Excel conveniente. Questo suggerimento (12684) si applica a Microsoft Excel 2007, 2010 e 2013.