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