Existe uma fórmula simples para o Excel que pode identificar uma string contendo caracteres não-ASCII?

0

Sei que usando a fórmula clean , posso limpar alguns dos caracteres não-ASCII (como caracteres de controle ASCII não imprimíveis adicionais de # 0 a # 31, # 129, # 141, # 143, # 144 e # 157, exceto # 127)

Eu também sei que posso usar o SUBSTITUTE(D1,CHAR(127),"") para remover ASCII # 127 não imprimível.

No entanto, não posso substituir ou identificar caracteres não-ASCII dentro de uma célula no Excel.

O seguinte é um exemplo simples:

Burrell's Model
Burrell’s Model

Observe que a primeira linha é uma string ASCII normal, enquanto a segunda linha contém um caractere não-ASCII (o apóstrofo).

Posso saber como usar o Excel para encontrar caracteres não ASCII?

Obrigado.

Atualização 1

De acordo com Bandrami, comenta o seguinte:

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 )

Posso saber como identificar caracteres que não estão no seguinte intervalo ASCII?

  • Menor que 128
  • Não é igual a 255
por user275517 19.05.2014 / 08:49

3 respostas

1

A ajuda do MS Office parece considerar o apóstrofo como um caractere que o CLEAN deve detectar, mas não o remove na minha máquina.

Ajuda do MS Office, Remover espaços e caracteres não imprimíveis do texto, segundo ao último parágrafo

O 'mais simples' que eu pude encontrar foi uma execução aninhada de SUBSTITUTOS que limpam qualquer coisa que a função CLEAN não detecta.

De um antigo grupo do Google Excel

=SUBSTITUTE(SUBSTITUTE(F17,CHAR(141),""),CHAR(143),"") etc etc
    
por 19.05.2014 / 10:52
0

Eu não estou totalmente claro o que você quer, e apesar de você indicar claramente a função de planilha, eu ofereço este código VBa já que possivelmente será mais personalizável ...

De acordo com ASCII , o tem um valor decimal maior que 127 (o valor real não é Não importa ... Então, este código verifica o valor de cada caractere e se estiver acima de 127, ele sinaliza ... Isso significa que você precisará revisar o link para ver quais caracteres são caracteres 'OK' a serem usados.

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

Então, como você pode ver, usei os dois exemplos em uma pequena mesa. Eu corro a macro, e para cada ocorrência do personagem, aparece em uma caixa de mensagem

    
por 19.05.2014 / 14:27
0

Eu vim aqui procurando a mesma resposta. Ao visualizar as respostas, percebo que não há uma solução simples. Esta é uma sub-rotina que eu chamo nos meus procedimentos. Você pode adaptá-lo à sua conveniência, a única coisa que você precisa é definir primeiro (em seu próprio código) o intervalo em que você aplicará as substituições. Espero que isso possa ser útil para alguém.

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
    
por 03.03.2016 / 18:49