In una grande tabella di dati, Ed vorrebbe essere in grado di scansionare rapidamente e vedere se una particolare colonna viene filtrata attivamente. Si chiede se esiste un modo per applicare la formattazione condizionale per modificare il colore di sfondo di una colonna quando è in gioco un filtro basato su quella colonna.

Ci sono alcuni modi in cui puoi affrontare questa attività. Tutti coinvolgono macro e lo scopo di ogni macro è determinare se un filtro è in gioco per una particolare colonna. Un’opzione è creare una funzione che esamini il foglio di lavoro per un filtro e, se ne trova uno, controllando ogni colonna nell’area filtrata per vedere se c’è un filtro in gioco in quella colonna. La seguente macro fa proprio questo.

Sub ColorFilterColumn()

Dim flt As Filter     Dim iCol As Integer     Dim lRow As Long     Dim rTemp As Range     Dim bFullCol As Boolean

' Set as True if you want entire column shaded     bFullCol = False

If ActiveSheet.AutoFilterMode Then         iCol = ActiveSheet.AutoFilter.Range.Column         lRow = ActiveSheet.AutoFilter.Range.Row         Application.EnableEvents = False         For Each flt In ActiveSheet.AutoFilter.Filters             If bFullCol Then                 Set rTemp = Cells(lRow, iCol).EntireColumn             Else                 Set rTemp = Cells(lRow, iCol)

End If

If flt.On Then                 rTemp.Interior.Color = vbYellow             Else                 rTemp.Interior.ColorIndex = xlColorIndexNone             End If

Set rTemp = Nothing             iCol = iCol + 1         Next flt         Application.EnableEvents = True     End If End Sub

Se la macro individua un filtro in funzione, evidenzia (in giallo) la prima cella nella tabella filtrata o l’intera colonna che ha il filtro. La determinazione dell’evidenziazione di una cella o dell’intera colonna si basa sul valore True / False assegnato alla variabile bFullCol.

Se preferisci, potresti creare una funzione che restituisca True o False in base all’effetto o meno di un filtro per una determinata colonna. Con una tale funzione è possibile creare una regola di formattazione condizionale che formatta la colonna in base al valore restituito.

Function bHasFilter(rcell As Range) As Boolean     Dim lBaseCol As Long     Dim lCol As Long

Application.Volatile     bHasFilter = False

If ActiveSheet.AutoFilterMode Then         With ActiveSheet.AutoFilter             lBaseCol = .Range.Column             lCol = rcell.Column - lBaseCol + 1             If lCol > 0 And lCol <= .Filters.Count Then                 If .Filters(lCol).On Then bHasFilter = True             End If         End With     End If End Function

Per utilizzare questa funzione, usa semplicemente una formula come la seguente nel tuo foglio di lavoro o nella regola di formattazione condizionale:

=bHasFilter(F23)

La funzione verifica prima se è attivo un filtro. In tal caso, calcola se la colonna della cella passata alla formula rientra nell’intervallo di colonne filtrate. (La riga a cui fa riferimento la formula non ha molta importanza.) In tal caso, controlla se il filtro è attivato per quella colonna.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13410) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.