Filtro multiplo



  • Filtro multiplo
    di Fabio (utente non iscritto) data: 14/07/2014 14:30:31

    Buongiorno, vorrei creare una macro per filtrare i dati in base a più valori. Cerco di spiegarmi allegando anche un file di prova:
    - nella colonna B del Foglio1, ho dei valori che evidenzio mettendo una X in colonna A della riga corrispondente
    - nella colonna C del Foglio2, ho gli stessi valori ma ripetuti anche più volte.
    La mia necessità è di filtrare le righe che nella colonna C del Foglio2 contengono i valori evidenziati nel Foglio1.
    Non essendo facile spiegare cosa mi serve, nel Foglio3 ho messo il risultato che mi aspetto.
    Graziue mille e buona giornata.



  • di nichicanta (utente non iscritto) data: 14/07/2014 15:15:52

    Ciao Fabio se ho capito bene tu hai bisogno di filtrare i dati evidenziti con la x e poi trasferire (magari su un altro foglio i dati correlati).
    Se è cosi ho una cosa che fa per te.
    Ti saluto.



  • di Fabio (utente non iscritto) data: 14/07/2014 15:24:30

    Ciao nichicanta,
    no, io i dati li ho già sul Foglio2, ho bisono di filtrarli in base ai valori evidenziati sul foglio1.
    Grazie



  • di nichicanta (utente non iscritto) data: 14/07/2014 15:37:10

    quindi devi filtrare solo i dati che in colonna A hanno la x e poi........



  • di Fabio (utente non iscritto) data: 14/07/2014 15:41:56

    esatto, e poi..... filtrare i dati del foglio2 in base ai valori evidenziati nel foglio1



  • di nichicanta (utente non iscritto) data: 14/07/2014 15:43:48

    dimmi solo se metti sempre la X nella colonna A del foglio1 per i dati che vuoi filtrare, oppure usi altro criterio o valore?



  • di Fabio (utente non iscritto) data: 14/07/2014 15:47:53

    sempre lo stesso valore, la X o qualcosa di simile (*, " o altro) ma sempre uguale in tutte le righe



  • di nichicanta (utente non iscritto) data: 14/07/2014 17:19:47

    Fabio sto provando ( con le mie capacità, sto usando un mio metodo) ora vado a casa e se riesco domani ti posto quello che ho pensato di fare io per il tuo quesito.
    Sicuramente altri più esperti di me ti daranno un'aiuto più veloce ed efficace.
    A domani



  • di nichicanta (utente non iscritto) data: 15/07/2014 16:00:04

    Ciao Fabio come promesso ecco il file che ho preparato per te ( se ho capito bene ciò che hai detto).
    Mi sono basato sul fatto che hai detto di avere gli stessi dati ( intendo con nr colonne di dati uguali) tra il foglio 1 e d il 2 e dopo aver selezionato con una x dei dati del foglio 1 e aver trovato una corrispondenza tra i dati del foglio 2 allora ( questi uguali ) copiarli nel foglio 3 ( io ho scelto il tuo range originale). Il file che ti allego si chiama ProvaFabio, fammi sapere.
    La macro si trova nel pulsante di comando presenet sul folgio 2.



  • di nichicanta (utente non iscritto) data: 15/07/2014 16:19:33

    Qualcosa non va nel fille che ho preparato per l'amico fabio(cerco di dare il mio apporto grazie a tutto quello che ho imparato da Voi).
    Vi prego di voler verificare cosa non va poichè ho fatto altre prove e non vedo funzioanre bene il contatore cioè( il numero dellei dati relamente filtrati e copiati) ecc.
    Io ho seguito questo ragionamento per aiutare l'amico fabio:
    1)Effettuo un filtro dei dati evidenziati cpon la X nel Foglio 1 e li esporto nel foglio che aggiungo e che chiamo PROVA ( mi serve per il confronto dei dati tra il foglio due e quelli incollati nel foglio PROVA),
    2)verifico se corripondono e se si li copio nel foglio 3 ( ma qui qualcosa non va bene).
    A voi chiedo l'aiuto per capire cosa è sbagliato e vi prego di volermelo spiegare e far capire per afvore.
    Grazie a tutti voi e resto in attesa di vostre notizie.



  • di Fabio (utente non iscritto) data: 15/07/2014 16:33:09

    Ciao nichicanta, innanzitutto grazie per la tua disponibilità.
    Io non ho la necessità di ricopiare i dati, ma di filtrare quelli che sono sul foglio2.
    Praticamente mi serve che restino visibili (nel foglio 2) solo le righe che nella colonna C hanno i valori corrispondenti a quelli selezionati con la X nel foglio1.
    Infatti, come puoi vedere nel foglio3 del mio file allegato (il risultato atteso), rimangono solo le righe 3,4,5,6,8,9,10.
    Grazie ancora.



  • di nichicanta (utente non iscritto) data: 16/07/2014 10:00:28

    in base alla tua ultima segnalazione i dati vengono filtrati nel foglio 2 verifica e fammi sapere Fabio.
    Il file allegato si chiama prova.
    Ciao.



  • di Fabio (utente non iscritto) data: 16/07/2014 11:23:52

    Ciao nichicanta,
    ho provato il file che hai caricato e mi pare ci sia un problema nei dati filtrati, ma sembra solo un problema di formula che hai inserito nella colonna AA e che dovrei riuscire a risolvere.
    Dopodichè devo provare a verificare se la macro applicata al mio file completo non sia troppo lenta in quanto deve copiare la formula in molte righe e i dati sono molti.
    Ti faccio sapere.
    Grazie mille.



  • di Raffaele_53 (utente non iscritto) data: 18/07/2014 01:23:09

    Due codici,
    Sub Nascondi per nascondere.
    Sub Visualizza (forse usi Excel inferiore del 2007), ho messo 65536
    Ti crei direttamente il bottone sul secondo foglio
     
    Option Explicit
    Sub Nascondi()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = Worksheets("Foglio2") ' da cambiare casomai
    Dim X As Long, Y As Long, Uriga1 As Long, Uriga2 As Long, Tot As Long
    Dim Stringa As String
    
    Uriga1 = sh1.Range("B" & Rows.Count).End(xlUp).Row
    Uriga2 = sh2.Range("C" & Rows.Count).End(xlUp).Row
        For Y = 1 To Uriga1
            If sh1.Cells(Y, 1) <> "" Then
                Stringa = Stringa & sh1.Cells(Y, 2).Value & Chr$(44)
            End If
        Next Y
            For X = 5 To Uriga2
                Tot = InStr(Stringa, sh2.Cells(X, 3))
                If Tot = 0 Then
                    sh2.Rows(X).Hidden = True
                    Tot = 0
                End If
            Next X
    Set sh1 = Nothing
    Set sh2 = Nothing
    End Sub
    
    Sub Visualizza()
        Rows("1:65536").Hidden = False
    End Sub



  • di Fabio (utente non iscritto) data: 18/07/2014 09:15:42

    Non è perfetto..... di più.....
    grazie mille Raffaele_53.
    Buona giornata



  • di Vecchio Frac data: 18/07/2014 11:52:25

    Mi sono divertito a riscrivere la sub di Raffaele... un approccio diverso (con Autofilter).
    Codice non testato approfonditamente ma dovrebbe funzionare ^_^
     
    Sub nascondi_vfrac()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = Worksheets("Foglio2") ' da cambiare casomai
    Dim column1_table1 As Range, column1_table2 As Range, v As Variant
    
        Set column1_table1 = sh1.Range("B" & Rows.Count).End(xlUp).End(xlUp).CurrentRegion.Columns(1).SpecialCells(xlCellTypeConstants, xlTextValues).Offset(, 1)
        Set column1_table2 = sh2.Range("C" & Rows.Count).End(xlUp).End(xlUp).CurrentRegion.Columns(1)
        
        For Each v In column1_table1
            column1_table2.AutoFilter field:=1, Criteria1:=v
            column1_table2.Offset(, -1) = "X"
        Next
        sh2.AutoFilterMode = False
        column1_table2.Offset(, -1).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
        column1_table2.Offset(, -1).ClearContents
    End Sub
    






  • di Fabio (utente non iscritto) data: 18/07/2014 12:00:55

    Grazie Vecchio Frac,
    è sempre interessante conoscere nuove soluzioni (anche se faccio un po' di fatica per la mia scarsa conoscenza di vba).
    Oggi lo provo e ti faccio sapere.
    Buona giornata.



  • di Textomb data: 18/07/2014 12:44:46

    L'idea è quella di passare nella tabella del foglio2 l'intero vettore con i valori da filtrare in un'unica istruzione
    Solo che con il 2007 o successivi "dovrebbe" funzionare. Almeno nella mia versione (2010) funge. Nella Versione 2003 ho paura che non passa...
    Mi saprete dire...
     
    Option Explicit
    Sub FiltroTextomb()
    Dim F As Range, F2(), j As Integer, cell As Range
    
        Set F = Foglio1.UsedRange.Columns(1).SpecialCells(xlCellTypeConstants, xlTextValues).Offset(, 1)
    
    ReDim F2(1 To F.Count)
        For Each cell In F
            j = j + 1
            F2(j) = CStr(cell)
        Next
    
    Foglio2.Range("c4").AutoFilter field:=1, Criteria1:=F2, Operator:=xlFilterValues
    
    Set F = Nothing
    Erase F2
    
    End Sub



  • di Fabio (utente non iscritto) data: 18/07/2014 13:01:15

    Ciao Textomb,
    ho provato a copiare il codice nel Modulo1 sul mio file con excel 2003.
    Quando avvio la macro mi da subito l'errore di compilazione: variabile non definita e mi evidenzia xlFilterValues nell'ultima riga.
    Purtroppo non sono in grado di capire se sbaglio qualcosa io o se è un problema di versione di excel.
    Grazie
    Buona giornata



  • di Raffaele_53 (utente non iscritto) data: 18/07/2014 14:44:59

    @Vecchio Frac
    Cercherò di capirla bene

    Set sh1 = Nothing???
    Set sh2 = Nothing???
    Set column1_table1 = Nothing???
    Set column1_table1 = Nothing???



  • di Raffaele_53 (utente non iscritto) data: 18/07/2014 14:49:02

    @Vecchio Frac
    Scusami, ho provato con un Array, non ci sono riuscito.
    Mettevo in ...autoFilter Field:=3, Criteria1:=Array( Stringa),Operator:=xlFilterValues

    Conosci il motivo?



  • di Fabio (utente non iscritto) data: 18/07/2014 15:00:07

    Ciao Vecchio Frac,
    ho provato sul file di prova in codice che mi hai creato e funziona perfettamente.
    Ho poi cercato di adattarlo al mio file reale ma, complice la mia poca esperienza, non riesco a farlo girare.
    Ecco le differenze rispetto al file di prova:
    - nel foglio1, colonna A ho i valori e in colonna C le X
    - nel foglio2, colonna A ho sempre i valori e la prima colonna libera (a destra) è la AM.
    Cortesemente, riesci ad adattarmi il codice?
    Grazie mille.