Форматирование столбцов на основе фильтра (Microsoft Excel)
В большой таблице данных Эд хотел бы иметь возможность быстро сканировать и видеть, активно ли фильтруется конкретный столбец. Он задается вопросом, есть ли способ применить условное форматирование для изменения цвета фона столбца, когда есть фильтр, основанный на этом столбце.
Есть несколько способов подойти к этой задаче. Все они включают макросы, и цель каждого макроса — определить, используется ли фильтр для определенного столбца. Один из вариантов — создать функцию, которая проверяет рабочий лист на наличие фильтра и, если он находит его на месте, проверяет каждый столбец в отфильтрованной области, чтобы увидеть, есть ли фильтр в этом столбце. Следующий макрос делает именно это.
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
Если макрос обнаруживает работающий фильтр, он либо выделяет (желтым цветом) первую ячейку в отфильтрованной таблице, либо весь столбец с фильтром. Определение того, будет ли выделена ячейка или весь столбец, основывается на значении True / False, присвоенном переменной bFullCol.
Если хотите, вы можете создать функцию, которая возвращает True или False в зависимости от того, действует ли фильтр для определенного столбца. С помощью такой функции вы можете создать правило условного форматирования, которое форматирует столбец на основе возвращаемого значения.
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
Чтобы использовать эту функцию, просто используйте следующую формулу на рабочем листе или в правиле условного форматирования:
=bHasFilter(F23)
Функция сначала проверяет, действует ли фильтр. Если да, то он вычисляет, находится ли столбец ячейки, переданной в формулу, в диапазоне отфильтрованных столбцов. (Строка, указанная в формуле, на самом деле не имеет значения.) Если да, то проверяется, включен ли фильтр для этого столбца.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13410) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.