Ricerca con caratteri accentati

di il
5 risposte

Ricerca con caratteri accentati

Forse difficile.

Tramite una casella di testo faccio una ricerca.
Se i caratteri sono italiani ok.

Per esempio vorrei cercare il nome ŠAÍ semplicemente digitando la parola senza accenti Sai

5 Risposte

  • Re: Ricerca con caratteri accentati

    Valuta tutti casi possibili con SELECT CASE.

  • Re: Ricerca con caratteri accentati

    Poi dipende in che modo vuoi fare la ricerca

  • Re: Ricerca con caratteri accentati

    Questa pagina può venir buona, specie nella parte in cui c'è la versione in puro VBA, senza API

    https://www.devhut.net/vba-convert-foreign-accent-characters-to-plain-english-characters/

    Ad ogni buon fine meglio riportare la funzione (quel sito ha chiuso i battenti per un po' di tempo su decisione del titolare, salvo ravvedersi poco dopo)

    '---------------------------------------------------------------------------------------
    ' Procedure : RemoveAccents
    ' Author    : Daniel Pineault, CARDA Consultants Inc.
    ' Website   : http://www.cardaconsultants.com
    ' Purpose   : Replace foreign/accented charactes with standard letters within a string
    ' Copyright : The following is release as Attribution-ShareAlike 4.0 International
    '             (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/
    ' Req'd Refs: None req'd
    '
    ' Input Variables:
    ' ~~~~~~~~~~~~~~~~
    ' sInputString  The string to convert
    '
    ' Usage:
    ' ~~~~~~
    ' RemoveAccents("LémuçelÇë")    -> LemucelCe
    '
    ' Revision History:
    ' Rev       Date(yyyy/mm/dd)        Description
    ' **************************************************************************************
    ' 1         2017-08-18              Initial Release
    '---------------------------------------------------------------------------------------
    Public Function RemoveAccents(sInputString As String) As String
        On Error GoTo Error_Handler
        Dim aNotAllowed()         As String
        Dim aReplacements()       As String
        Dim i                     As Long
    
        aNotAllowed = Split("À,Á,Â,Ã,Ä,Å,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ò,Ó,Ô,Õ,Ö,Ù,Ú,Û,Ü,Ý,à,á,â,ã" & _
                            ",ä,å,ç,è,é,ê,ë,ì,í,î,ï,ð,ò,ó,ô,õ,ö,ù,ú,û,ü,ý,ÿ", ",")
        aReplacements = Split("A,A,A,A,A,A,C,E,E,E,E,I,I,I,I,O,O,O,O,O,U,U,U,U,Y,a,a,a" & _
                              ",a,a,a,c,e,e,e,e,i,i,i,i,o,o,o,o,o,o,u,u,u,u,y,y", ",")
    
        If UBound(aNotAllowed) <> UBound(aReplacements) Then
            MsgBox "The number of 'Not allowed characters' does not match the number of" & _
                   " 'Replacements'.", vbCritical Or vbOKOnly, "Operation Terminated"
            GoTo Error_Handler_Exit
        End If
    
        RemoveAccents = sInputString
        For i = 0 To UBound(aNotAllowed)
            RemoveAccents = Replace(RemoveAccents, aNotAllowed(i), aReplacements(i))
        Next i
    
    Error_Handler_Exit:
        On Error Resume Next
        Exit Function
    
    Error_Handler:
        MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
               "Error Number: " & Err.Number & vbCrLf & _
               "Error Source: RemoveAccents" & vbCrLf & _
               "Error Description: " & Err.Description & _
               Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
               , vbOKOnly + vbCritical, "An Error has Occurred!"
        Resume Error_Handler_Exit
    End Function

    Come vedi tratta solo le vocali, basta poco per aggiungere anche le consonanti particolari. Ecco che come approccio si può usare altro codice pronto all'uso o quasi

    https://stackoverflow.com/questions/10032322/how-to-call-a-macro-to-convert-accented-characters-to-regular-that-does-not-ap

    https://stackoverflow.com/questions/60060527/is-there-a-faster-way-to-replace-accented-characters

    Anche se si parla di utilizzo in Excel basta ignorare la parte che prevede il salvataggio/scrittura in celle e il principio è lo stesso.

    Questo per la parte che riguarda la trasformazione da “caratteri accentati” (strani) a caratteri normali. Sul suo utilizzo poi si può ragionare: puoi ad esempio usare la funzione per creare un campo calcolato e su quello eseguire la ricerca, oppure ancora salvare il contenuto della stringa senza accenti in un campo apposito (per sfruttare gli indici) però qui bisogna andare con i piedi di piombo. Fa' le tue valutazioni e se hai bisogno di aiuto il forum c'è.

  • Re: Ricerca con caratteri accentati

    Il codice proposto da Phil è sicuramente funzionale, temo che sia molto lento se inserito in una Query ad esempio…!

    Un modo per velocizzare l'azione è discriminare se la stringa contiene SpecialChars… e nel caso TRUE, si esegue la routine di cui sopra.

    Un modo rapido anche se non perfetto in quanto non completo potrebbe essere questo:

    If TuaStringa LIKE "*[!A-Za-z0-9 ':.,]*" then RemoveAccents(TuaStringa)

    Non credo si possa ottimizzare molto questa esigenza, probabilmente con REGEXP si potrebbe fare di meglio… ma è un poco più complesso definire il Pattern ed i Replacements

    https://www.ablebits.com/office-addins-blog/regex-remove-characters-text-excel/

    https://blog.udemy.com/vba-regex/

  • Re: Ricerca con caratteri accentati

    04/10/2023 - @Alex ha scritto:

    sia molto lento se inserito in una Query ad esempio…!

    Ah, se lo si applica per un campo calcolato e i record sono tanti… si salvi chi può. Infatti la mia idea sarebbe stata poi un'altra ma non metto la sedia davanti alla scrivania (versione impiegatizia del carro davanti ai buoi).

    04/10/2023 - @Alex ha scritto:


    discriminare se la stringa contiene SpecialChars… e nel caso TRUE, si esegue la routine di cui sopra.

    Questa la conosco: “non fare una cosa se non serve farla”. Ecco, non avevo pensato minimamente al LIKE con quella struttura tanto meno alle espressioni regolari.

    Uff, vatti a fidare del codice prêt-à-porter: non è mai all'altezza e mi fa fare brutte figure. Eppure quando cerco specifico sempre “funzionante e funzionale, ottime performance”, sicuramente è colpa dei motori di ricerca che non capiscono (come il vigile a Milano con Totò e Peppino, era lui che non aveva capito niente).

Devi accedere o registrarti per scrivere nel forum
5 risposte