Bill a menudo tiene que importar información a una hoja de trabajo para poder procesarla para su empresa. En la situación de Bill, uno de los primeros pasos que debe hacer es eliminar todos los caracteres ASCII de 8 bits que pueden estar en los datos importados. Estos personajes no necesitan ser reemplazados por nada; solo deben eliminarse para que solo queden caracteres ASCII de 7 bits. Bill se pregunta si hay una manera fácil de hacer esto, quizás con una macro de algún tipo.

Hay varias formas de abordar este problema, según las características de los datos con los que esté comenzando. Suponiendo que solo tiene caracteres de 8 bits en su hoja de trabajo, entonces los únicos códigos de caracteres que podrían usarse para caracteres son 0 a 255.Si desea limitar sus datos a solo caracteres de 7 bits, entonces eso significa que solo quiere cosas en el rango de código de carácter de 0 a 127. Por lo tanto, podría usar una macro para buscar fácilmente cualquier carácter en el rango de 128 a 255 y simplemente eliminarlo. Esta macro adopta este enfoque:

Sub Remove8Bit1()

Cells.Select     For i = 128 To 255         X = Chr(i)

Selection.Replace What:=X, Replacement:="", _           LookAt:=xlPart, SearchOrder:=xlByRows, _           MatchCase:=False, SearchFormat:=False, _           ReplaceFormat:=False     Next End Sub

El enfoque encuentra solo aquellos valores en su hoja de trabajo que están en el rango de 8 bits. No tocará nada que esté en el rango de 8 bits creado por una fórmula. (En la mayoría de los casos eso no debería ser un problema. Si es un problema, la solución adecuada es modificar las fórmulas creando los resultados ofensivos).

Si sus datos contienen caracteres Unicode, entonces querrá utilizar un enfoque diferente. Técnicamente, los caracteres Unicode no son caracteres de 8 bits; son caracteres de 16 bits y pueden tener valores de código de carácter en el rango de 0 a 65.535. Debido a que desea ignorar cualquier cosa con un valor superior a 127, usar el enfoque basado en búsquedas que se discutió anteriormente se vuelve difícil de manejar; terminaría haciendo más de 65,000 búsquedas en lugar de solo 128.

Un mejor enfoque es simplemente mirar todos los caracteres en todas las celdas seleccionadas y si tienen un código de carácter superior a 127, ignórelos.

Ese es el enfoque adoptado en la siguiente macro:

Sub Remove8Bit2()

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 = Ascw(strCheckChar)

If intCheckChar < 128 Then                 strClean = strClean & strCheckChar             End If         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

Tenga en cuenta que la macro utiliza la función Ascw en lugar de la función Asc tradicional para que observe los valores Unicode.

_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 (3142) 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_8-Bit_ASCII_Characters [Deshacerse de caracteres ASCII de 8 bits].