Bryan tiene una hoja de trabajo que tiene muchas celdas que tienen algunos caracteres alfabéticos en ellas. Está buscando una forma de deshacerse de solo esos caracteres alfabéticos, sin importar dónde aparezcan en la celda. Por ejemplo, si la celda contiene «ABC123», Bryan quiere deshacerse de «ABC»

y solo quedan «123». Del mismo modo, «A3B2C1» debería convertirse en «321»

y «# 45P%» debería convertirse en «# 45%».

La única forma de abordar este problema es mediante el uso de macros. Si simplemente desea eliminar los caracteres en su lugar, puede hacerlo seleccionando las celdas que desea afectar y luego ejecutando una macro que examina cada celda y elimina los caracteres ofensivos. Hay muchas formas de hacer esto; la siguiente macro es un enfoque sencillo.

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

Lo bueno de este enfoque para eliminar los caracteres es que puede deshacerse fácilmente de otros caracteres simplemente modificando lo que está marcado (y las acciones que se toman) en la estructura Seleccionar caso.

Si no desea modificar las celdas originales, un buen enfoque es armar una función definida por el usuario que devuelva una versión «limpia» de una cadena. Esto se puede lograr haciendo algunas modificaciones en la macro anterior.

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

Para usar la función, puede poner una fórmula como la siguiente en una celda:

=CleanText2(A1)

El resultado es que la fórmula devuelve una versión «limpia» de lo que esté en la celda A1 sin alterar el contenido de la celda A1.

_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 (3219) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Getting_Rid_of_Alphabetic_Characters [Deshacerse de los caracteres alfabéticos].