Doppio filtro di ricerca



  • Doppio filtro di ricerca
    di Nicola D. (utente non iscritto) data: 23/03/2016 17:01:40

    Salve a tutti!
    Devo risolvere questo problema, ho una tabella composta da tre colonne, tre codici es:
    |A |1 |giallo |
    |B |1 |verde |
    |A |2 |giallo|

    Avendo questa tabella devo crearne un altra che mi dia i risultati nel seguente modo:
    GIALLO
    |A |1 |2
    VERDE
    |B |1
    Purtroppo qualsiasi cosa provi la ricerca si ferma con il primo A, cosa posso fare? grazie mille



  • di cromagno data: 23/03/2016 19:12:42

    Ciao, non riesco a capire il risultato che vuoi ottenere...

    Allega un file di esempio e spiega riferendoti a quello.

    Ciao


  • Ciao!
    di Nicola D. (utente non iscritto) data: 24/03/2016 09:25:32

    In effetti non è chiaro da spiegare, provo ad allegare un esempio per spiegarmi meglio. Semplicemente vorrei creare una ricerca in cui anche se trova il valore ma la cella a fianco non rispetti il criterio, non fermi la ricerca ma vada alla riga successiva.



  • di cromagno data: 24/03/2016 11:04:26

    Ciao,
    seguendo il tuo esempio, potresti usare un codice simile (sotto).

    Dal foglio1 clicca sul pulsante per avviare il codice.
    Ti riallego il file...
     
    Option Explicit
    
    Sub Nodi()
    Dim uRiga As Long, Gruppo(), RigaInizio As Long, ColInizio As Long
    Dim Nodi As Collection, i As Long, j As Long, k As Long, Colonna As Long
    Dim Codice As Collection, uRigaNodi As Long, Confronto As Long
    Dim CampoA As Range, CampoB As Range, Riga As Long
    
    Set Nodi = New Collection
    Set Codice = New Collection
    
    RigaInizio = 4
    ColInizio = 6
    uRiga = Range("A" & Rows.Count).End(xlUp).Row
    uRigaNodi = Cells(Rows.Count, ColInizio).End(xlUp).Row
    Range(Cells(RigaInizio, ColInizio), Cells(uRigaNodi, 1000)).ClearContents
    Set CampoA = Range(Cells(RigaInizio, 1), Cells(uRiga, 1))
    Set CampoB = Range(Cells(RigaInizio, 3), Cells(uRiga, 3))
    
    On Error Resume Next
    For i = RigaInizio + 2 To uRiga
        Nodi.Add Cells(i, 3).Value, CStr(Cells(i, 3).Value)
        Codice.Add Cells(i, 1).Value, CStr(Cells(i, 1).Value)
    Next i
    On Error GoTo 0
    
    For i = 1 To Nodi.Count
        Cells(RigaInizio + Riga, ColInizio).Value = "Tabella Nodo " & Nodi(i)
        Riga = Riga + 1
        For j = 1 To Codice.Count
            Confronto = Application.WorksheetFunction.CountIfs(CampoA, Codice(j), CampoB, Nodi(i))
            If Confronto > 0 Then
                Cells(RigaInizio + Riga, ColInizio).Value = Codice(j)
                Colonna = 1
                For k = RigaInizio + 2 To uRiga
                    If Cells(k, 3).Value = Nodi(i) And Cells(k, 1).Value = Codice(j) Then
                        Cells(RigaInizio + Riga, ColInizio + Colonna).Value = Cells(k, 2).Value
                        Colonna = Colonna + 1
                    End If
                Next k
                Riga = Riga + 1
            End If
        Next j
        Riga = Riga + 1
    Next i
    
    Set Nodi = Nothing
    Set Codice = Nothing
    Set CampoA = Nothing
    Set CampoB = Nothing
    End Sub
    


  • Ciao!
    di Nicola D. (utente non iscritto) data: 24/03/2016 12:27:18

    Grazie mille per la risposta!!!
    purtroppo cercavo una soluzione più semplice con le funzioni di excel senza ricorrere a vb.



  • di cromagno data: 24/03/2016 12:48:09

    Non credo che esista una soluzione "semplice" ma....mai dire mai.



  • di JACKS (utente non iscritto) data: 25/03/2016 00:06:59

    Siccome cerchi una soluzione in excel con poco VBA, ti allego un foglio di esempio, nel quale ho inserito alcune colonne (gialle), con una riga marrone da copiare a fianco della tua rabella (puoi nascondere le colonne).
    Ovviamente le colonne saranno tante quanti sono i nodi.
    con delle emplici formule cerchi i valori corrispondenti ai nodi (se il nodo della riga 1 è uguale alla lettera di ricerca, scriverai un numero progressivo, come da formula e via così fino alla fine)
    otterrai una griglia di numeri per colonne, che inizieranno sempre da 1.
    nel foglio 2 con un cerca.vert, andrai ad estrarre i dati secondo la numerazione risultante.
    è molto più complicato da spiegare, che da vedere.
    il problema è, quante "lettere" hai e quanto è estesa la tabella ?
    bisogna copiare la riga per tutta la lunghezza ed inserire tante colonne per quante sono le lettere.
    Il VBA a questo punto è necessario.
    prima di andare avantio dimmi se questa tipologia di soluzione, soddisfa le tue aspettative o meno.
    ciao