Bill通常必须将信息导入工作表中,以便他可以为公司处理这些信息。在Bill的情况下,他需要做的第一步就是删除可能在导入数据中的所有8位ASCII字符。这些字符不需要替换为任何东西。只需删除它们,以便仅保留7位ASCII字符。 Bill想知道是否有一种简单的方法可以执行此操作,也许可以使用某种类型的宏。

有几种方法可以解决此问题,具体取决于您开始使用的数据的特征。假设工作表中只有8位字符,那么只能用于0到255的字符是字符代码。如果要将数据限制为仅7位字符,则意味着只需要字符代码范围在0到127之间。因此,您可以使用宏轻松地搜索128到255范围内的任何字符,然后将其删除。此宏采用以下方法:

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

该方法仅在工作表中找到8位范围内的值。它不会涉及公式实际创建的8位范围内的任何内容。 (在大多数情况下,这应该不成问题。如果有问题,则正确的解决方法是修改公式来创建令人反感的结果。)

如果您的数据包含Unicode字符,则需要使用其他方法。从技术上讲,Unicode字符不是8位字符。它们是16位字符,并且字符代码值可以在0到65,535之间。因为您想忽略值大于127的任何内容,所以使用前面讨论的基于搜索的方法变得笨拙—您最终将进行超过65,000次搜索,而不是仅进行128次。

更好的方法是简单地查看所有选定单元格中的所有字符,如果它们的字符代码超过127,则忽略它们。

这是以下宏中采用的方法:

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

请注意,该宏使用Ascw函数而不是传统的Asc函数,以便它查看Unicode值。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3142)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

链接:/ excelribbon-Getting_Rid_of_8-Bit_ASCII_Characters [摆脱8位ASCII字符]。