Ricerca con macro

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
mitchutd
00lunedì 11 aprile 2016 14:27
Buongiorno,

Ultima richiesta della giornata:)

Esiste una macro che mi permette di ricercare e filtrare tramite una corrispondenza non esatta ma approssimativa il testo o valore digitato?

Per spiegarmi meglio, simile alla barra di ricerca di google?

Grazie come sempre del supporto

Mitchutd
alfrimpa
00lunedì 11 aprile 2016 15:21
Ciao Michele

Prova a vedere se il file allegato può andar bene.

Quando selezioni una cella dell'intervallo A1:E19 ti appare una maschera che contiene una casella di testo e una casella di riepilogo.

Nel momento in cui inizi a digitare qualche lettera nella casella di testo la casella di riepilogo si popolerà delle sole voci che contengono le lettere digitate.

Ovviamente il tutto andrà adattato al tuo caso.

Queste le macro inserite:

Private Sub ListBox1_Click()
ActiveCell.Value = UserForm1.ListBox1.Value
UserForm1.ListBox1.Visible = False
UserForm1.Hide
End Sub

Private Sub TextBox1_Change()
UserForm1.ListBox1.Visible = True
Call mCaricaListBox("FiltraDati")
End Sub

Private Sub UserForm_Initialize()
    Set sh = ThisWorkbook.Worksheets("Foglio2")
    UserForm1.ListBox1.Visible = False
    Call mCaricaListBox("CaricaDati")
End Sub


Private Sub mCaricaListBox(ByVal s As String)

    Dim lRiga As Long
    Dim lng As Long
    
    With sh
        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    
    With Me.ListBox1
        If s = "CaricaDati" Then
            For lng = 1 To lRiga
                .AddItem (sh.Range("A" & lng).Value)
            Next
        ElseIf s = "FiltraDati" Then
            .Clear
            For lng = 2 To lRiga
                If InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text) Then
                    .AddItem sh.Range("A" & lng).Value
                End If
            Next
        End If
    End With
    
End Sub


Private Sub UserForm_Terminate()
    Set sh = Nothing
End Sub
mitchutd
00lunedì 11 aprile 2016 17:15
Ciao Alfredo,

Ottima macro. Ma se in risultato di ricerca volessi il numero di cella e/o filtrare direttamente l'intero foglio?

Grazie come sempre.

Michele
alfrimpa
00lunedì 11 aprile 2016 18:22
Per trovare l'indirizzo potresti usare una function di questo tipo da inserire in un modulo standard

vb
Function TrovaIndirizzo(Tabella_Dati As Range, parola As Variant) As Variant
    If parola = "" Then
        TrovaIndirizzo = ""
     Exit Function
    End If
    TrovaIndirizzo = Tabella_Dati.Find(parola, LookAt:=xlWhole).Address(0, 0)
End Function


e sul foglio di lavoro potrai scrivere

=TrovaIndirizzo(matrice; valore da cercare)


Per filtrare i dati basta che registri una macro usando il Filtro dati base o avanzato.

Tutti questi sono solo suggerimenti; sta a te eventualmente applicarli alla tua situazione reale e sarà più facile per te in relazione al livello di conoscenze che hai del VBA.

La predetta function così come le macro che ti ho proposto nelle altre discussioni riesci a capirle?
mitchutd
00martedì 12 aprile 2016 08:31
Ciao Alfredo,

Grazie per i sempre preziosi consigli. Purtroppo sto approcciando ora alla programmazione VBA; diciamo che ho bisogno di un attimo per comprenderle.
Comunque ho riassunto tutto su una discussione allegando il file su cui sto lavorando.

Proseguo ad analizzare i tuoi suggerimenti. Ti aggiorno.

Grazie ancora.

Michele
ninja-1
00giovedì 9 febbraio 2017 13:29
Complimenti!
Funzionerebbe anche prendendo dati da altri fogli excel?
alfrimpa
00giovedì 9 febbraio 2017 14:01
Sì certo Andrea; ovviamente la macro va modificata in base alla tua situazione.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 03:10.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com