Sostituzione di lettere con numeri (Microsoft Excel)
Bill ha una colonna di testo in cui deve sostituire tutte le istanze di lettere con il numero che rappresenta la posizione della lettera nell’alfabeto. Quindi, ad esempio, se una cella contiene “T10A22”, Bill deve sostituire le lettere come “2010122”, dove T è sostituito con 20 e A è sostituito con 1. Nota che può esserci un numero qualsiasi di lettere in qualsiasi cella data.
Se è necessario eseguire questa operazione solo una volta (in un singolo foglio di lavoro), potrebbe essere abbastanza facile selezionare la colonna e utilizzare Trova e sostituisci. Puoi cercare A e sostituirlo con 1, cercare B e sostituirlo con 2 e così via. Ci sarebbero solo 26 iterazioni da eseguire, il che potrebbe sembrare oneroso ma può essere fatto in meno tempo di quello necessario per creare una macro per apportare le modifiche.
Detto questo, se devi eseguire questa attività regolarmente, una macro è la soluzione migliore. Puoi implementare l’approccio Trova e sostituisci usando una macro in questo modo:
Sub ReplaceLetters1() Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2 Selection.Replace What:="B", Replacement:="2" Selection.Replace What:="C", Replacement:="3" Selection.Replace What:="D", Replacement:="4" Selection.Replace What:="E", Replacement:="5" Selection.Replace What:="F", Replacement:="6" Selection.Replace What:="G", Replacement:="7" Selection.Replace What:="H", Replacement:="8" Selection.Replace What:="I", Replacement:="9" Selection.Replace What:="J", Replacement:="10" Selection.Replace What:="K", Replacement:="11" Selection.Replace What:="L", Replacement:="12" Selection.Replace What:="M", Replacement:="13" Selection.Replace What:="N", Replacement:="14" Selection.Replace What:="O", Replacement:="15" Selection.Replace What:="P", Replacement:="16" Selection.Replace What:="Q", Replacement:="17" Selection.Replace What:="R", Replacement:="18" Selection.Replace What:="S", Replacement:="19" Selection.Replace What:="T", Replacement:="20" Selection.Replace What:="U", Replacement:="21" Selection.Replace What:="V", Replacement:="22" Selection.Replace What:="W", Replacement:="23" Selection.Replace What:="X", Replacement:="24" Selection.Replace What:="Y", Replacement:="25" Selection.Replace What:="Z", Replacement:="26" End Sub
Per utilizzare la macro, seleziona le celle che desideri elaborare e quindi eseguila. Potresti anche usare un approccio diverso che si basi su un ciclo For … Next, in questo modo:
Sub ReplaceLetters2() Dim J As Integer Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2 For J = 66 To 90 Selection.Replace What:=Chr(J), Replacement:=J - 64 Next J End Sub
Mentre la prima operazione .Replace poteva essere inserita nel ciclo For … Next, ho scelto di tenerla separata in modo che (almeno a me) il ciclo apparisse più semplice. Questa è una scelta stilistica più che altro.
Se, per qualche motivo, non vuoi usare il metodo .Replace, puoi usare l’approccio vecchio stile di guardare ogni personaggio in qualunque cosa tu stia valutando. Questo è l’approccio utilizzato in questa funzione definita dall’utente:
Function LetterToNum(c As Range) As String Dim sRaw As String Dim J As Integer sRaw = UCase(c) For J = 1 To 26 sRaw = Replace(sRaw, Chr(J + 64), J) Next J LetterToNum = sRaw End Function
Per utilizzare questa funzione, inserisci semplicemente quanto segue nel tuo foglio di lavoro, dove A1 è la cella che vuoi convertire:
=LetterToNum(A1)
Se preferisci non usare le macro, potresti usare una formula piuttosto lunga per fare la conversione di una cella:
=TEXTJOIN("",FALSE, IF(ISNUMBER(VALUE(MID(A1,SEQUENCE(1,LEN(A1)),1))), MID(A1,SEQUENCE(1,LEN(A1)),1), COLUMN(INDIRECT(MID(A1,SEQUENCE(1,LEN(A1)),1) & ":" & MID(A1,SEQUENCE(1,LEN(A1)),1)))))
Questa formula presuppone che il testo che desideri convertire sia nella cella A1. Fondamentalmente esamina ogni carattere nella stringa di testo e determina se si tratta di una cifra o meno. Se lo è, utilizza il carattere originale; se non lo è, utilizza la funzione INDIRETTO per determinare una colonna in base alla lettera e quindi utilizza COLONNA per restituire un valore numerico per quella colonna. Il tutto viene poi ricombinato utilizzando la funzione TEXTJOIN.
_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 (7820) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.