John ha un foglio di lavoro per l’immissione dei dati che consente agli utenti di inserire le informazioni.

Vorrebbe che una cella fosse formattata automaticamente per visualizzare esattamente il numero di cifre decimali digitate da un utente. Ad esempio, se l’utente digita “12,345”, desidera che la cella venga formattata automaticamente per visualizzare 3 cifre decimali. John sa che potrebbe usare il formato Generale per una cella (che lo fa bene), ma questo approccio non funziona se l’utente inserisce un valore che termina con 0, come “12.34500”, che vorrebbe formattato (automaticamente) per visualizzare 5 cifre decimali.

Se stai pensando di poter utilizzare un formato personalizzato per soddisfare la necessità, non funzionerà. Con il formato sempre personalizzato che potremmo inventare, Excel elimina gli zeri finali da ciò che visualizza. (Oppure, al contrario, se il formato personalizzato include “0” come segnaposto, aggiunge zeri alla fine della voce.)

Il modo più semplice per gestirlo, onestamente, è semplicemente formattare le celle come Testo prima di iniziare a inserire le informazioni. In questo modo, Excel accetterà semplicemente ciò che viene inserito, inclusi gli zeri finali, e lo inserirà nella cella. Puoi, inoltre, allineare a destra il contenuto delle celle in modo che sembrino almeno un po ‘più simili a valori numerici.

Lo svantaggio di questo è che devi stare attento nell’usare i valori nelle formule. Il modo più sicuro è racchiudere semplicemente qualsiasi riferimento alla cella all’interno della funzione VALUE, in questo modo:

=VALUE(A1) * 1.375

Un altro approccio consiste nel creare una macro che controlli ciò che viene immesso in un intervallo di celle. Inizia formattando le celle come Testo, quindi crea un intervallo denominato (DataEntry) da quelle celle. È quindi possibile aggiungere il seguente codice al foglio dei codici per il foglio di lavoro che si sta utilizzando:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range     Dim sEntry As String     Dim dEntryNumber As Double     Dim arr

If Not Intersect(Target, Range("DataEntry")) Is Nothing Then         Application.EnableEvents = False         For Each c In Target.Cells             If IsEmpty(c) Then                 c.NumberFormat = "@"    ' Reset to Text format             Else                 If IsNumeric(c) Then                     If Len(c.Value) = 0 Then                         c.NumberFormat = "@"    ' Reset to Text format                     Else                         sEntry = c.Value                         dEntryNumber = CDbl(sEntry)



arr = Split(sEntry, ".")

If UBound(arr) = 1 Then                             ' Change NumberFormat in accordance with                             ' the number of digits after the decimal point                             c.NumberFormat = "0." & String(Len(arr(1)), "0")

c.Value = dEntryNumber                         End If                     End If                 End If             End If         Next c         Application.EnableEvents = True     End If End Sub

La macro viene attivata ogni volta che qualcosa cambia nel foglio di lavoro. Quindi verifica se tale modifica si è verificata in una delle celle nell’intervallo DataEntry. In tal caso, esamina ciò che viene inserito nella cella (che Excel tratta come testo, poiché è così che è stata formattata la cella)

e determina se è un numero e inoltre quante cifre ci sono a destra della cifra decimale. Quindi formatta la cella in modo che vengano visualizzati tutti i decimali e reinserisce il valore numerico nella cella.

L’unica condizione in cui questo approccio non funzionerà è se inserisci un valore in una cella nell’intervallo DataEntry (che converte la cella in un formato numerico) e quindi inserisci un valore numerico diverso nella stessa cella. La macro non ha modo di sapere, in quel caso, se ci sono degli zeri finali immessi. (Ricorda che gli zeri finali vengono conservati solo se la cella è formattata come Testo. Poiché la cella non lo è, Excel elimina gli zeri finali e la macro funziona con quel valore come se fosse stato inserito.)

_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 (1963) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.