Насколько я знаю, я думаю, что здесь есть несколько моментов, которые следует выделить:
Не все расширенные (или не) таблицы ASCII следуют той же кодировке символов. Таблица, которую вы связали, похоже, следует за CP437, а Excel следует за UTF-8 (Unicode), который вы можете протестировать с помощью функции UNICODE
в Excel. Здесь - ссылка, чтобы увидеть разницу, которую он вносит в шестнадцатеричные коды. Таким образом, вам, скорее всего, нужно выбрать интересующий вас диапазон в «Приложении Latin-1», который можно найти здесь . В этом упражнении я использовал символы из À-ÿ
в диапазоне: u00C0-\u00FF
Далее, ваш текущий класс символов охватывает обычные символы ASCII, однако я полагаю, что вас может заинтересовать только 0020-007F
поскольку вы, вероятно, не хотите включать 0000-001F
.
В-третьих, вы не установили для параметра Global
значение True
, что означает, что ваш текущий UDF будет только замените первый символ, который он находит за пределами вашего класса символов. Поэтому вам нужно установить этот параметр для замены всех символов вне определенного класса символов.
Итак, в заключение, нижеприведенное может работать для вас:
Public Function GetStrippedText(txt As String) As String
Dim regEx As Object
Set regEx = CreateObject("vbscript.regexp")
regEx.Global = True
regEx.Pattern = "[^\u0020-\u007F\u00C0-\u00FF]"
GetStrippedText = regEx.Replace(txt, "")
End Function
Для вашего понимания; [^\u0020-\u007F\u00C0-\u00FF]
означает:
[....]
- в скобках указано, что это класс символов ^
- каретка означает, что это отрицательный класс символов \u0020-\u007F
- означает, что символы идут от индекса 32 до индекса 127 , а \u00C0-\u00FF
- от 192 до 255.
Таким же образом вы можете увеличить количество диапазоны символов.
Примечание 1: Вместо Unicode вы также можете просто использовать шестнадцатеричные коды: "[^\x20-\x7F\xC0-\xFF]"
Примечание 2: Вы также можете создать класс символов без диапазонов Unicode или Hex. Вместо этого просто объедините интересующие вас персонажи.