Sheila ha un foglio di lavoro in cui è necessario inserire una serie di numeri a quattro cifre. Vorrebbe un modo in cui non è necessario premere Invio o Tab tra ogni voce. In altre parole, dopo aver premuto ogni quarta cifra, Sheila desidera che Excel passi automaticamente alla cella successiva.

Excel non fornisce questo tipo di immissione di dati come opzione. È tuttavia possibile creare una macro per gestire l’immissione dei dati. Un modo è per noi una semplice macro che richiede all’utente una stringa di caratteri. Quando l’utente preme Invio (per indicare che la stringa è completa), la macro prende ogni blocco successivo di quattro caratteri e li inserisce in celle consecutive.

Sub FourCharEntry1()

Dim str As String     Dim x As Integer     Dim y As Integer

str = InputBox("Enter string")

y = 0     For x = 1 To Len(str) Step 4         ActiveCell.Offset(0, y) = "'" & Mid(str, x, 4)

y = y + 1     Next End Sub

Si noti che la macro, poiché inserisce blocchi di quattro caratteri nelle celle, si assicura che ogni blocco sia preceduto da un apostrofo. La ragione di ciò è gestire quei casi in cui il blocco di quattro caratteri può essere composto solo da numeri e quei numeri iniziano con uno o più zeri. L’aggiunta dell’apostrofo assicura che Excel tratti la voce di cella come testo e gli zeri iniziali non verranno cancellati.

Puoi anche evitare l’uso di un InputBox semplicemente consentendo a qualcuno di inserire del testo in una cella del foglio di lavoro. La persona potrebbe scrivere quanto desidera (migliaia di caratteri, se necessario).

Quindi, con la cella selezionata, è possibile eseguire una macro che estrarrà le informazioni dalla cella ed eseguirà la stessa operazione, suddividendola in blocchi di quattro caratteri. La seguente macro fa proprio questo:

Sub FourCharEntry2()

Dim str As String     Dim x As Integer     Dim y As Integer

str = ActiveCell.Value     y = 0     For x = 1 To Len(str) Step 4         ActiveCell.Offset(0, y) = "'" & Mid(str, x, 4)

y = y + 1     Next End Sub

Un altro approccio consiste nell’utilizzare un modulo utente personalizzato per l’input dell’utente. Il modulo fornisce un’interazione molto più ricca con VBA, quindi puoi effettivamente inserire le informazioni nelle celle dopo aver inserito ogni quarto carattere.

Inizia creando un modulo utente (come descritto in altri numeri di ExcelTips) che contenga due controlli: una casella di testo e un pulsante. Assegna un nome alla casella di testo vText e associa il codice seguente:

Private Sub vText_Change()      If Len(vText) = 4 Then         ActiveCell = vText         ActiveCell.Offset(0, 1).Activate         UserForm1.vText.Value = ""

End If End Sub

Questo viene eseguito semplicemente ogni volta che il contenuto della casella di testo cambia (cioè, quando si digita ogni carattere) e quindi controlla la lunghezza di ciò che contiene. Quando la lunghezza raggiunge 4, il codice prende quei caratteri e li inserisce in una cella. Il contenuto di vText viene quindi svuotato.

Il nome del pulsante che crei nel modulo utente non ha molta importanza. Sarà usato come un modo per chiudere il form utente, e dovrebbe avere il seguente codice associato con esso:

Private Sub Cancel_Click()

Unload UserForm1 End Sub

Quando sei pronto per utilizzare il modulo utente, seleziona semplicemente la cella in cui desideri che inizi l’input e quindi esegui la seguente macro:

Sub Start()

UserForm1.Show End Sub

Viene visualizzato il modulo utente e puoi iniziare a digitare. Quando hai finito, fai clic sul pulsante e il modulo utente viene chiuso.

_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 (13102) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia di menu precedente di Excel qui: