Reemplazo de letras con números (Microsoft Excel)
Bill tiene una columna de texto en la que necesita reemplazar todas las instancias de letras con el número que representa la posición de la letra en el alfabeto. Entonces, por ejemplo, si una celda contiene «T10A22», entonces Bill necesita reemplazar las letras como «2010122», donde T se reemplaza con 20 y A se reemplaza con 1. Señala que puede haber cualquier número de letras en cualquier celda dada.
Si necesita hacer esto solo una vez (en una sola hoja de trabajo), puede ser bastante fácil seleccionar la columna y usar Buscar y Reemplazar. Puede buscar A y reemplazar con 1, buscar B y reemplazar con 2, y así sucesivamente. Solo habría que realizar 26 iteraciones, lo que puede parecer oneroso, pero se puede realizar en menos tiempo del que lleva crear una macro para realizar los cambios.
Dicho esto, si tiene que realizar esta tarea con regularidad, una macro es su mejor solución. Puede implementar el enfoque de Buscar y Reemplazar usando una macro de esta manera:
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
Para usar la macro, simplemente seleccione las celdas que desea procesar y luego ejecútela. También podría utilizar un enfoque diferente que se base en un bucle For … Next, de esta manera:
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
Si bien la primera operación .Replace podría colocarse dentro del bucle For … Next, elegí mantenerlo separado para que (al menos para mí) el bucle pareciera más simple. Esta es una elección estilística más que cualquier otra cosa.
Si, por alguna razón, no desea utilizar el método .Replace, puede utilizar el enfoque antiguo de mirar a cada personaje en lo que sea que esté evaluando. Este es el enfoque utilizado en esta función definida por el usuario:
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
Para usar esta función, simplemente coloque lo siguiente en su hoja de trabajo, donde A1 es la celda que desea convertir:
=LetterToNum(A1)
Si prefiere no usar macros, entonces podría usar una fórmula bastante larga para hacer la conversión de una celda:
=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)))))
Esta fórmula asume que el texto que desea convertir está en la celda A1. Básicamente, mira cada carácter de la cadena de texto y determina si es un dígito o no. Si es así, entonces usa el carácter original; si no es así, entonces usa la función INDIRECTA para determinar una columna basada en la letra y luego usa COLUMNA para devolver un valor numérico para esa columna. Todo esto luego se recombina usando la función TEXTJOIN.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (7820) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.