Я знаю, что используя clean формулу, я могу очистить некоторые не-ASCII-символы (например, дополнительные непечатаемые управляющие символы ASCII с # 0 по # 31, # 129, # 141, # 143, # 144 и # 157 кроме # 127)

Я также знаю, что могу использовать SUBSTITUTE(D1,CHAR(127),"") чтобы удалить непечатный ASCII # 127.

Однако я не могу заменить или идентифицировать не-ASCII символы внутри ячейки в Excel.

Ниже приведен простой пример:

Burrell's Model
Burrell’s Model

Обратите внимание, что первая строка является обычной строкой ASCII, а вторая строка содержит не-ASCII символ (апостроф).

Могу ли я узнать, как использовать Excel для поиска не-ASCII символов?

Спасибо.

Обновление 1

По словам Бандрами, комментарии следующие:

In the broadest sense this is impossible; there are valid ASCII strings that are also valid UTF characters, so there's no way to ever know "for certain" (see the "Bush hid the facts" bug: en.wikipedia.org/wiki/Bush_hid_the_facts )

Могу ли я узнать, как определить символы, не входящие в следующий диапазон ASCII?

  • Меньше чем 128
  • Не равно 255

3 ответа3

1

Справка MS Office, похоже, рассматривает апостроф как символ, который CLEAN должен поймать, но он не удаляет его на моей машине.

Справка MS Office, Удаление пробелов и непечатных символов из текста, второй до последнего абзаца

Самым простым, что я смог найти, был вложенный прогон SUBSTITUTE, который очищает все, что не может отловить функция CLEAN.

Из старой группы Google Excel

=SUBSTITUTE(SUBSTITUTE(F17,CHAR(141),""),CHAR(143),"") etc etc
0

Я не совсем понимаю, что вы хотите, и хотя вы четко указали функцию рабочего листа, я предлагаю этот код VBa, так как он, возможно, будет более настраиваемым ...

Согласно ASCII, is имеет десятичное значение больше 127 (фактическое значение не имеет значения)... Итак, этот код проверяет значение каждого символа и, если он превышает 127, он помечает его ... Это означает, что вам нужно просмотреть ссылку, чтобы увидеть, какие символы являются символами «ОК» для использования.

Sub Sheet2_Button1_Click()


    Dim rCell As Range
    Dim rRng As Range

    Set rRng = Range("A1:D8")

    For Each rCell In rRng.Cells
        Debug.Print rCell.Address & " --- " & rCell.Value
        Dim s As String
         s = rCell.Value

        For i = 1 To Len(s)

             Dim c2 As String
             Dim ascInt As Integer

             c2 = Mid(s, i, 1)
             ascInt = asc(Mid(s, i, 1))

             If (ascInt > 127) Then
                 MsgBox ("Cell " & rCell.Address & " has a " & c2)
             End If

        Next i

    Next rCell

End Sub

Итак, как вы можете видеть, я использовал 2 примера за небольшим столом. Я запускаю макрос, и при каждом появлении символа он появляется в окне сообщения

0

Я пришел сюда в поисках того же ответа. Просматривая ответы, я понимаю, что не существует простого решения. Это подпрограмма, которую я называю в своих процедурах. Вы можете адаптировать его для вашего удобства, единственное, что вам нужно, это сначала определить (в своем собственном коде) диапазон, в котором вы собираетесь применять замены. Я надеюсь, что это может быть полезно для кого-то.

Public Sub M2_reemplaza_acentos()
    'replace accented characters
    Dim Orig As Variant, Sust As Variant, i As Integer
    Orig = Array("á", "é", "í", "ó", "ú", "ñ", "Á", "É", "Í", "Ó", "Ú", "Ñ", "km/h")
    Sust = Array("a", "e", "i", "o", "u", "n", "A", "E", "I", "O", "U", "N", "kph")
    Application.ScreenUpdating = False
    For i = LBound(Orig) To UBound(Orig)
    ActiveSheet.Cells.Replace _
    What:=Orig(i), _
    Replacement:=Sust(i), _
    LookAt:=xlPart, _
    SearchOrder:=xlByRows, _
    MatchCase:=False
    Next i
    Application.ScreenUpdating = True
    End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .