Excel VBA Rimuovere i caratteri Unicode in una Stringa

Come faccio a rimuovere tutti i caratteri speciali che non rientrano sotto ASCII categoria in VBA?

Questi sono alcuni dei simboli che appare nella mia stringa, che devono essere rimossi.
Œ Œ Œ Œ Œ œ œ œ œ œ Š Š Ÿ §
Ci sono molti più personaggi.

Questo non appartiene ad ASCII categoria come si può vedere questo http://www.ascii.cl/htmlcodes.htm

Ho provato qualcosa di simile a questo

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

ma non ha funzionato.

Per favore mi aiuti a risolvere questo problema.

Grazie
Jeevan

InformationsquelleAutor Jeevan | 2016-05-04



6 Replies
  1. 6

    Sarebbe un RegEx soluzione essere di interesse a voi?

    Ci sono un sacco di esempi per le diverse lingue su questo sito ecco un C# uno: Come si può striscia non-ASCII caratteri da una stringa? (in C#).

    Provare questo per 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
    • Hey Grazie mille, funziona. Non sono sicuro di tutte le condizioni e tutti i particolari caratteri Unicode, ma per ora funziona bene. Ci vuole troppo tempo per l’elaborazione.
    • Se si sta convertendo molte stringhe ad esempio in un ciclo, quindi si tenta di definire il modello di una volta e solo chiamando il .Replace funzione all’interno del loop. Che potrebbe aiutare con la velocità.
    • Grazie 🙂 Che non è stato ridurre il tempo è molto, ma comunque ha contribuito a ridurre un po ‘ di tempo.
    • Coprirà tutti i unicode o semplicemente da 0 a 7F? Questo lavoro per tutte le condizioni al contorno? Per favore fatemi sapere.
    • Andrà a sostituire qualsiasi carattere Unicode gamma da 0 a 127.
  2. 1

    Che cosa si ottiene quando si scrive il seguente nella finestra immediata?

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

    Ottengo:
    alealealeale

    • Sì, Si stampa lo stesso per me. Sto avendo Ÿ come carattere speciale, ma quando il passato come una stringa all’interno di metodo di Sostituzione strName = Replace(strName, ChrW(376), ” “), dove strName è inizialmente ŸLPAIF diventa ?LPAIF. Questa stringa va, poi, a una scrittura di file di metodo, in cui il codice si blocca dicendo “errore di Run-time ‘5’ chiamata di routine non Valido o argomento”. Penso che ? di recente ha prodotto, inoltre, non è un normale punto di domanda, ma alcuni caratteri speciali. Voglio sostituire la mia stringa dinamica, non statica come “ŸŸŸŸ” è mostrato.
    • Ciao, penso che stia funzionando in modalità Debug.Di stampa, ma quando utilizzo effettivo valore di una cella, dove Y è presente, non lo fa.
  3. 0

    provare application.clean()

    è di rimuovere tutti i caratteri non stampabili

    • Mi puoi fare un esempio per esso. Io non sono in grado di trovare qualsiasi applicazione.clean() nel glossario codice in vba.
    • Si prega di dare un’occhiata a questo tavolo di montaggio.co/FtkoMrB.png ho anche provato a “strName = Pulito(strName)” e non ha funzionato.
    • Prova con l’Applicazione.WorksheetFunction.Pulito(“üäöaŠsd”). Ma non vi aiuterà, è solo per i caratteri non stampabili. E le tue sono stampabili.
    • Hai ragione. Questo è solo un test per vedere se si sta prestando attenzione xD 😛 Ma @Jeevan .clean esiste sotto worksheetfunction ma può anche essere chiamato sotto application. Mi limiterò a lasciare la risposta qui per riferimento.
    • Non capisco esattamente cosa vuoi dire. L’applicazione”.pulito” non mostra con Intellisense, ma con l’applicazione”.worksheetfunction.pulito” c’è.
    • vedere answers.microsoft.com/en-us/office/forum/office_2003-customize/…
    • Anche questo l’ho provato, ma non ha funzionato.

  4. 0

    Supponendo che si dispone di:

    Excel VBA Rimuovere i caratteri Unicode in una Stringa

    Quindi il codice seguente ottiene la String da A1 e lascia passare solo ANSI (codice 0 a 255) in 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
    • Ciao, ho provato questo codice, e ‘ sostituito Ÿ con un ? nell’output. Che ancora non risolve il problema.
    • Penso che durante la lettura stessa Ÿ viene letto come ? da excel. Ÿ è comunque invisibile nel foglio excel.
    • Come si può vedere nella mia foto, il “Questo Œ si œ un Š testš . Ÿ ƒ Blubb.” è contenuto effettivo del mio foglio. Con questo il mio codice funziona esattamente come io l’ho descritta. Dove si vede la “Y”, che è poi non visibile nel foglio?
    • Vedo Ÿ quando faccio copia e incolla la stringa dalla cella di excel in un blocco note. Grazie per aver cercato di aiutare. Abbiamo una soluzione Ambie. Grazie per i vostri sforzi.
  5. 0

    Provare con sotto

    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
    • Sto usando qualcosa di simile, ma la moto del mio codice non è questo. Esso dovrebbe consentire di carattere speciale che sono in formato ASCII, ma solo rimuovere carattere speciale che non è sotto il codice ASCII da 0 a 255.
    • potete per favore mostrami la tua stringa?
    • La mia Stringa appare come LPAIF nel foglio excel, ma c’è un Ÿ char nascosto nella parte anteriore, che non è visibile in excel, ma non esiste, quindi la stringa è ŸLPAIF. Alcune soluzioni di cui sopra ha funzionato quando ho dato “ŸLPAIF” come una stringa statica, ma non quando leggere direttamente da excel. Comunque abbiamo subito una soluzione, grazie per aver cercato di aiutare.
  6. 0

    Non c’è bisogno di loop ogni personaggio

    Forse in ritardo, ma forse è utile a qualcuno:

    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

Lascia un commento