Избавление от 8-битных символов ASCII (Microsoft Excel)
Биллу часто приходится импортировать информацию в рабочий лист, чтобы он мог обрабатывать ее для своей компании. В ситуации Билла одним из первых шагов, которые ему необходимо сделать, является удаление всех 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]
.