2016-05-04 7 views
1

Как удалить все специальные символы, которые не подпадают под категорию ASCII в VBA?Excel VBA Удаление символов Unicode в строке

Это некоторые из символов, которые появляются в моей строке, которые необходимо удалить. Œ œ Š š Ÿ ƒ Есть еще много таких символов.

Это не относится к категории ASCII, как вы можете увидеть это http://www.ascii.cl/htmlcodes.htm

Я пытался что-то вроде этого

strName = Replace(strName, ChrW(376), " ") 

, но это не сработало.

Пожалуйста, помогите мне решить эту проблему.

Благодаря Jeevan

+0

Терминология: Как вы знаете, Unicode является надстройкой ASCII. Однако символы ASCII находятся в так называемом «блоке», а не [категории Unicode] (http://www.fileformat.info/info/unicode/category/index.htm); в частности блок [C0 Controls and Basic Latin] (http://unicode.org/charts/nameslist/). –

ответ

4

Будет ли RegEx решение будет представлять интерес для Вас?

На этом сайте представлено множество примеров для разных языков - вот C# 1: How can you strip non-ASCII characters from a string? (in C#).

Попробуйте для VBA:

Private Function GetStrippedText(txt As String) As String 
    Dim regEx As Object 

    Set regEx = CreateObject("vbscript.regexp") 
    regEx.Pattern = "[^\u0000-\u007F]" 
    GetStrippedText = regEx.Replace(txt, "") 

End Function 
+1

Привет Большое спасибо, это работает. Не уверен, что все условия и все специальные символы Юникода, но пока это работает хорошо. Для обработки требуется слишком много времени. – Jeevan

+1

Если вы преобразовываете многие строки, например, в цикл, попробуйте определить шаблон один раз и просто вызовите функцию '.Replace' внутри вашего цикла. Это может помочь со скоростью. – Ambie

+0

Спасибо :) Это не уменьшило время, но в любом случае это помогло сократить немного времени. – Jeevan

0

попробовать application.clean()

будет удалить все непечатаемые символы

+0

Не могли бы вы привести мне пример. Я не могу найти application.clean() в коде autotext в vba. – Jeevan

+0

Пожалуйста, взгляните на это http://pasteboard.co/FtkoMrB.png Я также попытался «strName = Clean (strName)», и они не сработали. – Jeevan

+0

Попробуйте использовать Application.WorksheetFunction.Clean ("üäöaSsd"). Но это вам не поможет, это только для непечатаемых персонажей. И ваш можно печатать. – Vityata

0

Что вы получаете, когда вы пишете следующее в ближайшем окне?

?Replace("ŸŸŸŸ", ChrW(376), "ale") 

я получаю: alealealeale

+0

Да Это печатает то же самое для меня. У меня есть Ÿ как специальный символ, но когда он передается как строка внутри метода Replace strName = Replace (strName, ChrW (376), ""), где strName изначально ŸLPAIF становится? LPAIF. Затем эта строка переходит к методу write to file, где происходит сбой кода с сообщением «Ошибка времени выполнения» 5 «Неверный вызов или аргумент процедуры». Я думаю что ? новообразованный также не является обычным вопросительным знаком, а особым характером. Я хочу заменить его в своей динамической строке, а не на статичной, как показано на рисунке «ŸŸŸŸ». – Jeevan

+0

Привет, я думаю, что он работает в Debug.Print, но при использовании фактического значения из ячейки, где присутствует,, он этого не делает. – Jeevan

0

предположив, что вы есть:

enter image description here

Тогда следующий код получит String от A1 и пусть только через ANSI (код 0 до 255) в A2.

Sub test() 
Dim s1 As String, s2 As String, c As String, i As Long, iAsc As Integer 

s1 = Range("A1").Value 

s2 = "" 

For i = 1 To Len(s1) 
    c = Mid(s1, i, 1) 
    iAsc = AscW(c) 
    If iAsc <= 255 Then 
    s2 = s2 & c 
    End If 
Next 

Range("A2").Value = s2 

End Sub 
+0

Привет, я пробовал этот код, и он заменил Ÿ на? на выходе. Что еще не решает проблему. – Jeevan

+0

Я думаю, что, читая себя Ÿ, читается как? по преимуществу. Ÿ в любом случае невидим в листе excel. – Jeevan

+0

Как вы видите на моей картинке, «Это Œ œ тест š Ÿ ƒ Blubb». это фактическое содержание моего листа. С этим мой код работает точно так, как я описал его. Где вы видите «Ÿ», который затем ** не ** отображается на листе? –

0

Попробовать ниже

Function ClearUnwantedString(fulltext As String) As String 
    Dim output As String 
    Dim character As String 
    For i = 1 To Len(fulltext) 
     character = Mid(fulltext, i, 1) 
     If (character >= "a" And character <= "z") Or (character >= "0" And character <= "9") Or (character >= "A" And character <= "Z") Then 
      output = output & character 
     End If 
    Next 
    ClearUnwantedString = output 
End Function 

Sub test() 
    a = ClearUnwantedString("dfjŒœŠdskl") 
End Sub 
+0

Я использую что-то подобное, но мой код не тот. Он должен допускать специальный символ, который является ASCII, но удаляет только специальный символ, который не подпадает под ASCII-код от 0 до 255. – Jeevan

+0

вы можете показать мне свою строку? –

+0

My String выглядит как LPAIF в листе excel, но есть символ, скрытый спереди, который не отображается в excel, но он существует, поэтому строка является ŸLPAIF. Некоторые приведенные выше решения работали, когда я дал «ŸLPAIF» как статическую строку, но не при чтении из excel напрямую. В любом случае у нас есть решение сейчас, спасибо за помощь. – Jeevan