ciclo su FiltroAttivo



  • ciclo su FiltroAttivo
    di Textomb data: 30/10/2012 23:47:39

    Non riesco a trovare una soluzione semplice per eseguire un ciclo su una tabella filtrata.
    Cioè data una tabella con parecchie migliaia di dati, ho filtrato la stessa cercando solo le righe che rispondono a determinati criteri provenienti da una matrice Array.
    come posso eseguire un ciclo sul set di dati che si presenta dopo il filtro?
    faccio un esempio giusto per maggiore comprensione.
    Stralcio una parte del codice...
     
    ' inizio a costruire la tabella con i filtri voluti in base alla regola scelta
    FiltroArrayMonth = WorksheetFunction.Transpose(Passaggio.Range("d1:d" & TabFRm))
    FiltroArrayWeek = WorksheetFunction.Transpose(Passaggio.Range("e1:e" & TabFRw))
    
    Calcoli.Range("a1").CurrentRegion.AutoFilter field:=2, Criteria1:=Array(FiltroArrayMonth), Operator:=xlFilterValues
    Calcoli.Range("a1").CurrentRegion.AutoFilter field:=3, Criteria1:=Array(FiltroArrayWeek), Operator:=xlFilterValues
    
    ' Adesso la mia tabella si presenta filtrata con il set di dati su cui dovrei eseguire un ciclo che ovviamente deve passare solo i records visibili... come posso procedere?
    



  • di HarryBosch data: 31/10/2012 00:37:12

    Ciao Textomb
    una volta filtrata la tabella potresti settarla e utilizzare lo SpecialCells per passare tutte le celle.
     
    Set tabfiltrata = [a1].CurrentRegion
        For Each cella In tabfiltrata.SpecialCells(xlCellTypeVisible)
              '...
        Next cella
    
    'oppure per scorrere una determinata colona, ad esempio la D:
       For Each cella In tabfiltrata.Columns(4).SpecialCells(xlCellTypeVisible)
              '...
        Next cella



  • di Textomb data: 31/10/2012 08:27:33

    Ciao HarryBosh
    grazie mille per il tuo suggerimento.
    Certo devo utilizzare For each e specialcells... Io avevo intrapreso strade che portavano allo stesso risultato ma troppo lunghe da percorrere. Questa invece mi pare la strada più breve.
    grazie



  • di Vecchio Frac data: 31/10/2012 14:39:18

    cit. " Questa invece mi pare la strada più breve "
    ---> Più che altro è la strada più *efficiente* oltre che più *elegante*.
    Resta da vedere come si comporta il codice testandolo nel caso non raro in cui non ci siano celle da visualizzare (filtro che non restituisce alcun dato).





  • di Vecchio Frac data: 31/10/2012 14:44:10

    Attenzione, per la precisione, che il codice per " scorrere una determinata colonna ad esempio la D " non si comporta nel modo voluto se la "tabfiltrata" inizia in una colonna diversa da A. Infatti nell'esempio fatto la specifica .Columns(4) è relativa a "tabfiltrata": si intende "la quarta colonna rispetto alla prima colonna del range"; poniamo caso che "tabfiltrata" inizia in colonna C, l'esempio fatto scorre la quarta colonna della tabfiltrata che è la colonna F del foglio.
    Per scorrere la colonna D del foglio basta indicare "ActiveSheet" invece che "tabfiltrata".
    L'annotazione mi sembrava doverosa :)


     
    'oppure per scorrere una determinata colonna, ad esempio la quarta colonna della tabella: 
    For Each cella In tabfiltrata.Columns(4).SpecialCells(xlCellTypeVisible)
              '...
    Next cella