Formato de columna basado en un filtro (Microsoft Excel)
En una gran tabla de datos, a Ed le gustaría poder escanear rápidamente y ver si una columna en particular se está filtrando activamente. Se pregunta si hay alguna forma de aplicar formato condicional para cambiar el color de fondo de una columna cuando hay un filtro en juego que se basa en esa columna.
Hay algunas formas de abordar esta tarea. Todos ellos involucran macros, y el propósito de cada macro es determinar si hay un filtro en juego para una columna en particular. Una opción es crear una función que examine la hoja de trabajo en busca de un filtro y, si encuentra uno en su lugar, verificar cada columna en el área filtrada para ver si hay un filtro en juego en esa columna. La siguiente macro hace precisamente eso.
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
Si la macro localiza un filtro que está funcionando, resalta (en amarillo) la primera celda de la tabla filtrada o toda la columna que tiene el filtro. La determinación de si se resalta una celda o toda la columna se basa en el valor Verdadero / Falso asignado a la variable bFullCol.
Si lo prefiere, puede crear una función que devuelva Verdadero o Falso en función de si un filtro está en vigor para una columna en particular. Con dicha función, podría crear una regla de formato condicional que formatee la columna en función del valor devuelto.
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
Para usar esta función, simplemente use una fórmula como la siguiente en su hoja de trabajo o en la regla de formato condicional:
=bHasFilter(F23)
La función primero verifica si hay un filtro en efecto. Si es así, calcula si la columna de la celda pasada a la fórmula está dentro del rango de columnas filtradas. (La fila a la que se hace referencia en la fórmula realmente no importa). Si es así, verifica si el filtro está activado para esa columna.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (13410) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.