Bryan ha un foglio di lavoro che ha molte celle che contengono alcuni caratteri alfabetici. Sta cercando un modo per sbarazzarsi solo di quei caratteri alfabetici, indipendentemente da dove compaiono nella cella. Ad esempio, se la cella contiene “ABC123”, Bryan vuole sbarazzarsi di “ABC”

e ne rimangono solo “123”. Allo stesso modo, “A3B2C1” dovrebbe diventare “321”

e “# 45P%” dovrebbe diventare “# 45%”.

L’unico modo per affrontare questo problema è attraverso l’uso di macro. Se vuoi semplicemente rimuovere i caratteri, in posizione, puoi farlo selezionando le celle che desideri influenzare e quindi eseguendo una macro che esamina ogni cella ed elimina i caratteri offensivi. Ci sono molti modi per farlo; la seguente macro è un approccio diretto.

Sub CleanText1()

Dim rngCell As Range     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

For Each rngCell In Selection         strCheckString = rngCell.Value         strClean = ""



For intChar = 1 To Len(strCheckString)

strCheckChar = Mid(strCheckString, intChar, 1)

intCheckChar = Asc(strCheckChar)

Select Case intCheckChar                 Case 65 To 90      'upper case chars                     'Do nothing                 Case 97 To 122     'lower case chars                     'Do nothing                 Case 128 To 151    'special language chars                     'Do nothing                 Case 153 To 154    'special language chars                     'Do nothing                 Case 159 To 165    'special language chars                     'Do nothing                 Case Else                     strClean = strClean & strCheckChar             End Select         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

La cosa bella di questo approccio per eliminare i personaggi è che puoi sbarazzarti facilmente di altri personaggi semplicemente modificando ciò che viene controllato (e quali azioni vengono intraprese) nella struttura Seleziona caso.

Se non si desidera modificare le celle originali, un buon approccio è mettere insieme una funzione definita dall’utente che restituirà una versione “pulita” di una stringa. Ciò può essere ottenuto apportando alcune modifiche alla macro precedente.

Function CleanText2(ByVal sRaw As String) As String     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

Application.Volatile     strClean = ""

For intChar = 1 To Len(sRaw)

strCheckChar = Mid(sRaw, intChar, 1)

intCheckChar = Asc(strCheckChar)

Select Case intCheckChar             Case 65 To 90      'upper case chars                 'Do nothing             Case 97 To 122     'lower case chars                 'Do nothing             Case 128 To 151    'special language chars                 'Do nothing             Case 153 To 154    'special language chars                 'Do nothing             Case 159 To 165    'special language chars                 'Do nothing             Case Else                 strClean = strClean & strCheckChar         End Select     Next intChar     CleanText2 = strClean End Function

Per utilizzare la funzione, potresti inserire una formula come la seguente in una cella:

=CleanText2(A1)

Il risultato è che la formula restituisce una versione “pulita” di tutto ciò che si trova nella cella A1 senza disturbare il contenuto della cella A1.

_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 (3219) 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: