膨大な数の列を持つシートがあり、正しいデータに移動するためにフィルタリングがよく使用されます。問題は、フィルターが適用されていることがはっきりしない場合があり、視覚的な手がかりが非常に微妙であるということです。別のセル内のフィルターに関する数式またはVBAを介していくつかのデータを表示することは可能ですか?
このようなもの:
フィルタがアクティブであるかどうかを知ることは良い助けになります。どの列にアクティブなフィルタが適用されているかを知ることは、ケーキの上のアイシングになります。理想的には、それらは自動的に更新されます。
私はスプレッドシートの所有権を持っていないので、その構造などに大きな変更を加えることはできませんが、VBAは問題ありません。
何か案は?
これは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 それを提案するため)。これは、パラメータで定義した範囲が変更された場合にのみ再計算されるため、説明されているソリューションよりも優れていることに注意してください ここ 。
フィルターあり:
AutoFilterは有効になっていますが、列はフィルタリングされていません:
条件付き書式で使用:
Excel VBAマクロでオートフィルターを使用する方法
AutoFilterオブジェクト(Excel 2003 VBA言語リファレンス)