Craig sta sviluppando un foglio di lavoro e vuole sapere se esiste un modo per specificare il numero massimo di caratteri che possono essere inseriti in una determinata cella. Non vuole utilizzare la convalida dei dati per imporre la limitazione.

Non c’è modo di farlo direttamente in Excel senza (come cita Craig)

utilizzando la convalida dei dati. Tuttavia, ci sono alcune cose che puoi provare per ottenere l’effetto desiderato. Innanzitutto, puoi utilizzare una formula per controllare la lunghezza di qualsiasi cella e quindi visualizzare un messaggio di errore, se lo desideri. Ad esempio, se le celle che vuoi controllare sono nella colonna C, potresti usare una formula come la seguente:

=IF((LEN(C1)>15),"Cell is Too Long","")

Posiziona la formula nella cella a destra della cella da controllare (come nella cella D1), quindi copiala tutte le celle necessarie.

Quando viene inserita una voce in C1 e se contiene più di 15 caratteri, viene visualizzato il messaggio.

Se un approccio così diretto non è desiderabile, sarà necessario utilizzare le macro per eseguire il controllo. Quello che segue è un semplice esempio che viene attivato ogni volta che viene modificato qualcosa nel foglio di lavoro. Ogni cella del foglio di lavoro viene quindi controllata per assicurarsi che non sia più lunga di 15 caratteri. Se viene rilevata una cella di questo tipo, viene visualizzata una finestra di messaggio e la cella viene cancellata.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each cell In UsedRange         If Len(cell.Value) > 15 Then             MsgBox " Can't enter more than 15 characters"

cell.Value = ""

End If     Next End Sub

Un approccio più robusto consiste nel controllare nel gestore eventi per vedere se la modifica è stata apportata da qualche parte all’interno di un intervallo di celle che devono essere limitate in lunghezza.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim rng As Range     Dim rCell As Range     Dim iChars As Integer     On Error GoTo ErrHandler

'Change these as desired     iChars = 15     Set rng = Me.Range("A1:A10")



If Not Intersect(Target, rng) Is Nothing Then         Application.EnableEvents = False         For Each rCell In Intersect(Target, rng)

If Len(rCell.Value) > iChars Then                 rCell.Value = Left(rCell.Value, iChars)

MsgBox rCell.Address & " has more than" _                   & iChars & " characters." & vbCrLf _                   & "It has been truncated."

End If         Next     End If

ExitHandler:

Application.EnableEvents = True     Set rCell = Nothing     Set rng = Nothing     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Per utilizzare questa macro, è sufficiente modificare il valore assegnato a iChars (rappresenta la lunghezza massima consentita) e l’intervallo assegnato a rng (attualmente impostato su A1: A10). Poiché la macro controlla solo le modifiche all’interno dell’intervallo specificato, è molto più veloce con fogli di lavoro più grandi rispetto alla macro che controlla tutte le celle utilizzate.

_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 (3150) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: