Condividi:        

ciclo while con celle filtrate

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

ciclo while con celle filtrate

Postdi templare77 » 19/11/17 21:14

Buona sera ragazzi,
navigando in rete, ho trovato questo codice per la selezione di celle derivanti da un filtro automatico

Codice: Seleziona tutto
For Each visible_cell In Foglio1.Range("A2:A" & UR).SpecialCells(xlCellTypeVisible)
       
        anno = visible_cell
       
       
    Next visible_cell


e fino a qui tutto ok.
Volevo sapere se c'è un metodo per poter puntare non solo alla cella attuale del ciclo FOR, il cui valore va a finire nella variabile "anno", ma un'istruzione che mi permetta di puntare alla prossima cella visibile....una sorta di "visible_cell(cont)", dove "cont" è un indice.
In realtà "visible_cell(cont)", funzionerebbe...solo che dalla prima cella visibile, non salto alla seconda cella visibile, ma a quella successiva che è nascosta.....
Io potrei anche, tramite un ciclo preventivo, andare a valorizzare un array con tutti i numeri di riga delle celle visibili e poi con un secondo ciclo, andare a selezionare l'ennesima cella visibile ed anche quella successiva o precedente, però volevo sapere se c'è un'istruzione apposita, grazie
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Sponsor
 

Re: ciclo while con celle filtrate

Postdi Zer0Kelvin » 19/11/17 21:40

Ciao.
Forse esiste un modo meno macchinoso, ma io farei così: memorizzerei le celle in una collection ed utilizzerei questa per puntare alle celle.
L'esempio allegato seleziona le celle in sequenza ed usa msgbox per interrompere l'esecuzione fra un select e l'altro per mostrare come si sposta la selezione

****EDIT****
Scusa, non avevo letto l'ultima parte del tuo post, in pratica è quasi la stessa cosa che usare l'array.

Codice: Seleziona tutto
Sub Test()
Dim Coll As Collection
Dim r As Range
Dim C As Long
    Set Coll = New Collection
    For Each r In Foglio1.Range("A2:A10").SpecialCells(xlCellTypeVisible)
        Coll.Add r
    Next r
    For C = 1 To Coll.Count
        Coll(C).Select
        MsgBox ""
    Next C
    Set Coll = Nothing
End Sub
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: ciclo while con celle filtrate

Postdi templare77 » 19/11/17 22:41

Grazie lo stesso Zer0Kelvin ;-)
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: ciclo while con celle filtrate

Postdi Anthony47 » 20/11/17 00:53

Un po' vago come descrizione del problema da risolvere... vedi se questo codice ti da' qualche spunto:
Codice: Seleziona tutto
For Each Visible_Cell In Foglio1.Range("A2:A" & UR).SpecialCells(xlCellTypeVisible)
    If IsEmpty(Anno) Then
        Anno = Visible_Cell
    ElseIf IsEmpty(Mese) Then
        Mese = Visible_Cell
    ElseIf IsEmpty(Giorno) Then
        Giorno = Visible_Cell
    End If
Next Visible_Cell
Tieni presente che Anno, Mese e Giorno devono essere dichiarate come Variant, per usare IsEmpty; oppure usa un test compatibile col tipo di variabile che dichiari.

In alternativa
Codice: Seleziona tutto
Range("Z1:Z10000").ClearContents
'Qui applicare il filtro
On Error Resume Next
Set myRan = Foglio1.Range("A2:A" & UR).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not myRan Is Nothing Then
    myRan.Copy Foglio1.Range("Z1")
End If
A questo punto in Z1 e sottostanti hai solo le celle visibili e lavori su questo intervallo
La pulizia di colonna Z va fatta quando il foglio non e' ancora filtrato; myRan va dichiarata di tipo Range.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ciclo while con celle filtrate

Postdi templare77 » 20/11/17 06:38

Ciao Anthony e grazie come sempre della tua disponibilità!
La mia domanda mal posta era un'altra però, e cioè: se io devo puntare alle celle di un range, supponiamo sia la colonna A, scrivo Foglio1.Cells(1+R, 1). Grazie alla valorizzazione di R, posso confrontare due celle adiacenti per esempio. In presenza delle celle filtrare invece, come si fa? Il Next del ciclo For, mi fa andare avanti fra le sole celle visibili, ok.....ma se all'interno del ciclo volessi confrontare due celle filtrate che risultano adiacenti ma che hanno numero di riga non consecutivo? Per esempio, con visible_cell.Next, punto la cella che sta nelle colonna a fianco, ma per puntare la cella che sta sotto a quella attualmente selezionata? Grazie ancora :-D
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: ciclo while con celle filtrate

Postdi Anthony47 » 20/11/17 20:15

Nel caso di celle filtrate la cosa non si puo' fare in modo diretto.
Quindi o trovi, col tuo ciclo For Each visible_cell In Foglio1.Range("A2:A" & UR).SpecialCells(xlCellTypeVisible) / Next visible_cell, il primo valore e poi sai che il Next visible_cell ti porta al successivo (era il mio primo esempio); oppure crei l'elenco delle sole celle visibili e lavori in modo convenzionale su questo secondo elenco (era il mio secondo esempio; ma le modalita' sono varie).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ciclo while con celle filtrate

Postdi templare77 » 20/11/17 20:30

Grazie mille Anthony! Sei un faro!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: ciclo while con celle filtrate

Postdi Zer0Kelvin » 08/12/17 14:44

Ciao a tutti.
Riesumo questo (relativamente) vecchio post per citare una possibile semplice soluzione che mi è venuta in mente leggendo un quesito analogo su altro forum.
Si tratterebbe di usare l'evento Worksheet_SelectionChange
Codice: Seleziona tutto
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        If Target.EntireRow.Hidden Then Target.Offset(1, 0).Select
        If Target.EntireColumn.Hidden Then Target.Offset(0, 1).Select
    End If
End Sub
Selezionando una cella non visibile, la selezione si sposta automaticamente sulla prima cella visibile.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: ciclo while con celle filtrate

Postdi templare77 » 08/12/17 16:23

Grazie Zer0Kelvin!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26


Torna a Applicazioni Office Windows


Topic correlati a "ciclo while con celle filtrate":


Chi c’è in linea

Visitano il forum: Gianca532011 e 72 ospiti