web-dev-qa-db-ja.com

Excelの列フィルター情報をセルに表示する

膨大な数の列を持つシートがあり、正しいデータに移動するためにフィルタリングがよく使用されます。問題は、フィルターが適用されていることがはっきりしない場合があり、視覚的な手がかりが非常に微妙であるということです。別のセル内のフィルターに関する数式またはVBAを介していくつかのデータを表示することは可能ですか?

このようなもの:

フィルタがアクティブであるかどうかを知ることは良い助けになります。どの列にアクティブなフィルタが適用されているかを知ることは、ケーキの上のアイシングになります。理想的には、それらは自動的に更新されます。

私はスプレッドシートの所有権を持っていないので、その構造などに大きな変更を加えることはできませんが、VBAは問題ありません。

何か案は?

4
Alex

これはVBAでのみ可能だと思います。

また、オートフィルターが正しい範囲に適用されているかどうかを確認する必要はなく(参考資料を参照)、AUTOFILTERがアクティブであるかどうかを確認する必要はないと思います。 not(つまり、矢印なし、オートフィルターなし)。

これは、ワークシートにアクティブなフィルターがあるかどうかを確認し、ある場合はどの列がフィルターされているかを表示するユーザー定義関数です。私はそこにもっと良い機能があると確信しています。ニーズに合わせて変更する必要があるかもしれません。

_Function CheckFilters(r As Range) As String

Set AWS = ActiveSheet
fstate = ""

If AWS.FilterMode Then
    c = AWS.AutoFilter.Filters.Count

    'go through each column and check for filters
    For i = 1 To c Step 1
       If AWS.AutoFilter.Filters(i).On Then
            fstate = fstate & r(i).Value & ", "
       End If
    Next i

    'removes the last comma
    fstate = Left(fstate, Len(fstate) - 2) 
Else
    fstate = "NO ACTIVE FILTERS"
End If

CheckFilters = fstate

End Function
_

使用するには、ffを入力します。空のセルへの数式:

_=CheckFilters(A3:E3)&LEFT(SUBTOTAL(9,A3:A48),0)
_

ここで、_A3:E3_にはデータの列ラベルが含まれます(以下の例を参照)

数式の&LEFT(SUBTOTAL(9,A3:A48),0)部分は、フィルターを変更したときにセルに「自動的に」再評価を強制する以外に、目に見える目的はありません。 (クレジット Sean Cheshire それを提案するため)。これは、パラメータで定義した範囲が変更された場合にのみ再計算されるため、説明されているソリューションよりも優れていることに注意してください ここ

フィルターあり:
enter image description here

AutoFilterは有効になっていますが、列はフィルタリングされていません:
enter image description here

条件付き書式で使用:
enter image description here

参考文献

Excel VBAマクロでオートフィルターを使用する方法
AutoFilterオブジェクト(Excel 2003 VBA言語リファレンス)

4
Ellesa