В большой таблице данных Эд хотел бы иметь возможность быстро сканировать и видеть, активно ли фильтруется конкретный столбец. Он задается вопросом, есть ли способ применить условное форматирование для изменения цвета фона столбца, когда есть фильтр, основанный на этом столбце.

Есть несколько способов подойти к этой задаче. Все они включают макросы, и цель каждого макроса — определить, используется ли фильтр для определенного столбца. Один из вариантов — создать функцию, которая проверяет рабочий лист на наличие фильтра и, если он находит его на месте, проверяет каждый столбец в отфильтрованной области, чтобы увидеть, есть ли фильтр в этом столбце. Следующий макрос делает именно это.

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.