Excel VBA Удалить символы Юникода в строке

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

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

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

Я пробовал что то подобное

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

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

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

Спасибо дживан

6 ответов

Решение

Был бы RegEx решение вас заинтересует?

На этом сайте есть множество примеров для разных языков - вот C# one: Как вы можете вырезать не-ASCII символы из строки? (в 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

Не нужно зацикливать каждый символ

Может быть поздно, но, может быть, это кому-то поможет

Public Function StripNonAsciiChars(ByVal InputString As String) As String
    Dim i As Integer
    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    With RegEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = "[^\u0000-\u007F]"
        StripNonAsciiChars = Application.WorksheetFunction.Trim(RegEx.Replace(InputString, " "))
    End With
End Function

Попробуй с ниже

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

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

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

Я получаю: alealealeale

Пытаться application.clean()

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

Предположим, у вас есть:

Тогда следующий код получит 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
Другие вопросы по тегам