Биллу часто приходится импортировать информацию в рабочий лист, чтобы он мог обрабатывать ее для своей компании. В ситуации Билла одним из первых шагов, которые ему необходимо сделать, является удаление всех 8-битных символов ASCII, которые могут быть в импортированных данных. Эти символы не нужно чем-либо заменять; их просто нужно удалить, чтобы остались только 7-битные символы ASCII. Билл задается вопросом, есть ли простой способ сделать это, возможно, с помощью какого-либо макроса.

Есть несколько способов решения этой проблемы в зависимости от характеристик данных, с которых вы начинаете. Предполагая, что у вас есть только 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), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (3142) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Getting_Rid_of_8-Bit_ASCII_Characters [Избавление от 8-битных символов ASCII].