Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie

Rimani informato sugli aggiornamenti di SOS-OFFICE. Inserisci il tuo indirizzo e-mail: Informativa sulla privacy

Nel post di oggi, voglio mostrare come contare con VBA le righe che risultano dalla applicazione di un filtro automatico in Excel, sia che questo sia stato applicato via codice che in modo interattivo tramite l’interfaccia di Excel.

 

Dopo aver applicato il filtro, per contare le righe che risultano dal filtro occorre usare questa riga di codice

ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count – 1

La proprietà Autofilter di un oggetto Worksheet restituisce un oggetto Autofilter se, nel foglio di lavoro è presente un filtro automatico.

La proprietà Range dell’oggetto AutoFilter restituisce un oggetto Range che rappresenta l'intervallo a cui si applica il filtro automatico.

La proprietà Columns dell’oggetto Range, restituisce a sua volta un oggetto Range che rappresenta le colonne nell'intervallo specificato. In particolare,  la colonna che corrisponde al numero specificato fra parentesi. In questo caso, la prima colonna dell’intervallo.

Per finire, il metodo SpecialCells dell’oggetto Range, restituisce un oggetto Range che rappresenta tutte le celle che corrispondono al tipo e al valore specificati tramite l’argomento del metodo steso.

SpecialCells ha questa sintassi

espressione.SpecialCells(Type, Value)

Type è un parametro obbligatorio e indica il tipo di celle da considerare. Come argomento type SpecialCells accetta uno dei seguenti valori costanti

Costanti XlCellType

 

Valore

xlCellTypeAllFormatConditions

Celle in qualsiasi formato.

-4172

xlCellTypeAllValidation

Celle con criteri di convalida.

-4174

xlCellTypeBlanks

Celle vuote.

4

xlCellTypeComments

Celle che contengono note.

-4144

xlCellTypeConstants

Celle che contengono costanti.

2

xlCellTypeFormulas

Celle che contengono formule.

-4123

xlCellTypeLastCell

L'ultima cella dell'intervallo utilizzato.

11

xlCellTypeSameFormatConditions

Celle con lo stesso formato.

-4173

xlCellTypeSameValidation

Celle con gli stessi criteri di convalida.

-4175

xlCellTypeVisible

Tutte le celle visibili.

12

L’argomento value ha effetto solo se type è  xlCellTypeConstants o xlCellTypeFormulas e viene usato per determinare quali celle inserire nell’intervallo. Può assumere i seguenti valori costanti

Costanti XlSpecialCellsValue

Valore

xlErrors

16

xlLogical

4

xlNumbers

1

xlTextValues

2

 

Nel nostro caso, dunque, l’argomento value non occorre. Noi includiamo nell’oggetto Range restituita da SpecialCells tutte le celle visibili della prima colonna dell’intervallo a cui è applicato il filtro automatico.

A questo punto non ci resta che contare le celle di questo intervallo e sottrarre 1 per eliminare dal conteggio la riga di intestazione.  Il risultato di questo conto rappresenta appunto il numero delle righe che risultano dal filtro.

Verificare che il filtro automatico sia attivo

Se il filtro non viene applicato via codice, non si può essere certi che sia stato effettivamente applicato e che quindi l’oggetto AutoFilter esista. Per cui, per ottenere un errore, prima di usare questo oggetto può essere utile verificare che esista.

Per faro si può ricorrere alla proprietà AutoFilterMode che ha valore True se le frecce di selezione del Filtro automatico sono visualizzate sul foglio. La verifica può avvenire così

 

If ActiveSheet.AutoFilterMode = True Then
   MsgBox ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
Else
   MsgBox "no filtro"
End If

Naturalmente al posto delle righe MsgBox si dovrà sostituire il codice da eseguire nel caso in cui il filtro è attivo e nel caso in cui non lo è.

Joomla templates by a4joomla