Funzione Like



  • Funzione Like
    di Alessio (utente non iscritto) data: 30/07/2015 23:02:08

    Giorno a tutti,
    in una precedente discussione soon riuscito (ma solo grazie ad alfredo che mi ha dato un enorme aiuto) a creare un form per la ricerca del nome cliente da un elenco di 4000 voci e più.
    La ricerca sostanzialmente non è una vera e propria ricerca in quanto viene creato un filtro su ogni colonna e dal form quando digito il nome cliente mi anticipa il nome completo, che per carità va benissimo, ma io mi chiedevo se invece di conoscere il nome esatto conoscessi solo una parte del nome il motore di ora non me lo troverebbe. Mi spiego meglio, se il cliente si chiama Mario rossi, e nel form digito "Mar" lui automaticamente mi evidenzia "mario rossi" ma se metto prima "rossi" non me lo trova così come se metto "ario".

    E qui vengo al dunque, mi hanno detto di utilizzare il metodo Like ma dalla rete non ci ho capito nulla, e non so come fare ne da dove iniziare. Qualcuno mi saprebbe dare una dritta?

    Qui sotto posto ilcodice legato al tasto cerca. La ricerca viene fatta fino all'ultima riga scritta, in modo tale da rendere dinamica la ricerca.

    Grazie a tutti
     
    Private Sub CommandButton1_Click()
    Dim ur As Long
    ur = Range("a" & Rows.Count).End(xlUp).Row
    If UserForm1.OptionButton1.Value = True Then
        Worksheets("Tabella1").Range("a1").Select
        Selection.AutoFilter
            ActiveSheet.Range("$A$1:$G$" & ur).AutoFilter Field:=3, Criteria1:= _
            UserForm1.ComboBox1.Value
        Else
            Worksheets("Tabella1").Range("a1").Select
            Selection.AutoFilter
            ActiveSheet.Range("$A$1:$G$" & ur).AutoFilter Field:=5, Criteria1:= _
            UserForm1.ComboBox1.Value
    End If
    End Sub



  • di Raffaele_53 data: 31/07/2015 00:57:16

    Senza allegare un file? Il codice mi da errore in "OptionButton1" (membro/metodo dei dati)
    Comunque questo codice funziona
     
    Sub Macro1()
    Dim ur As Long, nome As String
    'nome = "*" & "ario" & "*"
    nome = "*" & "ossi" & "*"
    ur = Range("a" & Rows.Count).End(xlUp).Row
    Range("$A$1:$G$" & ur).AutoFilter
        ActiveSheet.Range("$A$1:$K$15").AutoFilter Field:=4, Criteria1:=nome, Operator:=xlAnd
    End Sub



  • di Vecchio Frac data: 31/07/2015 09:00:08

    L'operatore Like serve basicamente per confrontare due stringhe e ritorna un valore vero o falso se il confronto ha successo. E' un'oeratore più complesso del semplice confronto maggiore, minore e uguale perchè permette di raggruppare caratteri di confronto e di specificare gruppi consentiti.

    Esempio:
    "pippo" Like "*[A-Za-z]*" dà True perchè la stringa "pippo" è composta da caratteri tra A e Z in maiuscolo o minuscolo.
    "pippo" Like "*[0-9]*" dà False perchè la stringa "pippo" non contiene numeri tra 0 e 9.

    Come suggerisce Raffaele comunque te la puoi cavare anche col semplice asterisco che è un carattere detto "jolly" e sostituisce qualunque carattere digitabile.

    Il tuo codice modificato diventa così:
    ActiveSheet.Range("$A$1:$G$" & ur).AutoFilter Field:=3, Criteria1:= _
    "*" & UserForm1.ComboBox1.Value & "*"


    (da modificare sia nel ramo If che nel ramo Else)
    Tuttavia dovresti riflettere sul fatto che sia proprio quello che vorrebbe l'utente, cioè il risultato deve essere mostrato anche se si digita un pezzo di stringa contenuto nella parola da cercare (rischi di avere moltissimi risultati e ciò rallenta l'esecuzione).
    Nota che io in uno dei miei programmi ho fatto proprio così e funziona (immissione in una textbox, riempimento di una listbox con risultati parziali ^_^)







  • di Alessio (utente non iscritto) data: 01/08/2015 14:53:30

    Grazie ragazzi, mi stavo facendo un sacco di problemi ed invece la soluzione almeno per me era molto più semplice del previsto.

    Al momento per me va bene così, poi il tempo mi dirà se dovrò cambiare oppure no.
    Il codice corretto è quello suggerito da Vecchio Frac.

    Grazie
     
    ActiveSheet.Range("$A$1:$G$" & ur).AutoFilter Field:=3, Criteria1:= _
    "*" & UserForm1.ComboBox1.Value & "*"