Formattazione delle colonne basata su un filtro (Microsoft Excel)
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.