Диапазон символьных кодов 192..609 содержит общие 221 полукокса, которые являются представимы в ASCII (т.е. может быть преобразован из диакритических символов):
А А А А А А С Е Æ E E E Ì Í Î Ï Ñ Ò Ò Ô Õ Õ Ö Ù Ù Ù Ù ü Все права защищены. Ĺ ĺ Ļ ļ Ľ ľ Ł ł Ń ń ń ņ Ň ň Ō ō Ŏ ŏ ŏ ů Ō Ō ō Ŏ ŏ ů ů ů ū ū ū ū ů ů ů ů ū ů ů ů ů ů ů ů ů ů ů ů ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ƀ Ɖ Ƒ ƒ Ʈ Ư Ư Ư Ư Ư Ư Ư ˙U ¨z ǎ ǎ Й. Й. Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ Ǟ ǟ Ǥ ǥ ǧ ǧ ǩ ǩ ǫ ǫ Ǭ ǭ ǰ ɡ
Как правило, вы можете обойтись без дополнительного листа, заполнение словаря с заменяемые символы на лету, что-то вроде кода ниже:
Sub Test()
ReplaceDiacritics Selection
End Sub
Sub ReplaceDiacritics(oTargetRange As Range)
Static oDiaChars As Object
Dim i, j, sRange, sCured, sChar, aRes
If oDiaChars Is Nothing Then
Set oDiaChars = CreateObject("Scripting.Dictionary")
sRange = ""
For i = 192 To 609
sRange = sRange & ChrW(i)
Next
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Open
.Charset = "ascii"
.WriteText sRange
.Position = 0
sCured = .ReadText
.Close
End With
For i = 192 To 609
sChar = Mid(sCured, i - 191, 1)
If sChar <> "?" Then oDiaChars(ChrW(i)) = sChar
Next
End If
If oTargetRange.Cells.Count = 1 Then
sRange = oTargetRange.Value
For Each sChar In oDiaChars
sRange = Replace(sRange, sChar, oDiaChars(sChar))
Next
oTargetRange.Value = sRange
Else
aRes = oTargetRange.Value
For i = LBound(aRes, 1) To UBound(aRes, 1) ' rows
For j = LBound(aRes, 2) To UBound(aRes, 2) ' columns
For Each sChar In oDiaChars
aRes(i, j) = Replace(aRes(i, j), sChar, oDiaChars(sChar))
Next
Next
Next
oTargetRange.Value = aRes
End If
End Sub
словарь объявлен как статический, таким образом, он заполняется при первом запуске только я тестировал код с выбором 1000 ячеек 3500 символов длиной каждый, она занимает около 8 секунд для меня. Поэтому, чтобы не повредить в течение долгого времени, лучше назвать его ReplaceDiacritics ActiveSheet.UsedRange
, но не ReplaceDiacritics Cells
.
Частичное решение : 'chartr ('şăîâ'," saia ", TestString)', но по крайней мере для меня консоль R не обрабатывает первые два символа. – G5W
Можете ли вы прочитать файл в UTF-8, а затем заменить не само письмо, а его код UTF-8 (http://www.fileformat.info/info/charset/UTF-8/list.htm). –