Edは、データの大きなテーブルで、特定の列がアクティブにフィルタリングされているかどうかをすばやくスキャンして確認できるようにしたいと考えています。彼は、列に基づくフィルターが機能しているときに、条件付き書式を適用して列の背景色を変更する方法があるかどうか疑問に思います。

このタスクに取り組む方法はいくつかあります。それらはすべてマクロを含み、各マクロの目的は、特定の列に対してフィルターが機能しているかどうかを判別することです。 1つのオプションは、ワークシートでフィルターを調べる関数を作成し、フィルターが見つかった場合は、フィルターされた領域の各列をチェックして、その列でフィルターが機能しているかどうかを確認することです。次のマクロはまさにそれを行います。

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

マクロが機能しているフィルターを見つけると、フィルターされたテーブルの最初のセルまたはフィルターのある列全体が強調表示されます(黄色で表示されます)。セルまたは列全体が強調表示されているかどうかの判断は、bFullCol変数に割り当てられたTrue / False値に基づいています。

必要に応じて、特定の列に対してフィルターが有効であるかどうかに基づいて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_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13410)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。