Избавление от 8-битных символов ASCII

Биллу часто приходится импортировать информацию в рабочий лист, чтобы он мог обрабатывать ее для своей компании. В ситуации Билла одним из первых шагов, которые ему нужно сделать, является удаление всех 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 NextEnd 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 В выделении strCheckString = rngCell.Value strClean = «» Для intChar = 1 To Len (strCheckString) strCheckChar = Mid (strCheckString, intChar, 1) intCheckChar = Ascw (strCheckChar) Если intCheckCharckx = 128, тогда strCheckCharan = int rngCell.Value = strClean Далее rngCellEnd Sub

Обратите внимание, что макрос использует функцию Ascw вместо традиционной функции Asc, так что он смотрит на значения Unicode.

Источник: frestage.ru

Бытовой вопрос