2016-07-06 10 views
1

データのいくつかの列にフィルタを使用するスプレッドシートがあります。これらの列の1つには、10の異なる値があります。特定のフィルタがあることを確認したいと思います。つまり、実際にはそのフィルタの値が何であるかを実際に確認するだけではなく、autofiltermode = trueです。 VBAでこれを行う方法はありますか?特定のフィルタの内容を確認する方法

たとえば、ユーザーがcustomersだけを見ているようにするには、自分のフィールドに10個の値のうち1個を表示します。だから私はif filtervalue = "customers" thenのようなものを言うことができると思っています。

また、セルのデータを確認したくないので、フィルタを確認する方法があるかどうかを尋ねています。

答えて

2

以下のサンプルコードでは、フィルタを含む範囲の最初のセルとチェックする列のインデックスが指定されているかどうかを確認します。

Option Explicit 

Sub Test() 
    'first argument is first cell of headers being filtered 
    'second argument is column to check for filter criteria 
    Debug.Print GetCriteria(Sheet1.Range("A1"), 3) 
End Sub 

Function GetCriteria(rng As Range, lngFilterIndex As Long) As String 

    Dim strCriteria As String 
    Dim objFilter As AutoFilter 
    Dim lngCriteriaCount As Long 
    Dim lngCounter As Long 

    Set objFilter = rng.Parent.AutoFilter 

    ' no autofilter 
    If objFilter Is Nothing Then 
     GetCriteria = "" 
     Exit Function 
    End If 

    ' autofilter but no selection 
    If Not objFilter.Filters(lngFilterIndex).On Then 
     GetCriteria = "" 
     Exit Function 
    End If 

    ' iterate criteria 
    strCriteria = "" 
    lngCriteriaCount = objFilter.Filters(lngFilterIndex).Count 
    If lngCriteriaCount = 1 Then 
     strCriteria = objFilter.Filters(lngFilterIndex).Criteria1 
    Else 
     For lngCounter = 1 To objFilter.Filters(lngFilterIndex).Count 
      strCriteria = strCriteria & objFilter.Filters(lngFilterIndex).Criteria1(lngCounter) 
     Next lngCounter 
    End If 

    GetCriteria = strCriteria 

End Function 
関連する問題