3

フィルター オプションを使用して範囲をフィルター処理しようとしています。

 ActiveSheet.Range("$K$2:$ZZ$200").AutoFilter Field:=11, Criteria1:="yes"

基本的に、列 U をフィルター処理して yes にします。
私が持っているのはドロップダウンリストで、その範囲のエントリがどのフィールドにあるかを見つけるために必要です。たとえば、列 U には「John」という名前が含まれています。

したがって、ドロップダウンから John を選択した場合、範囲を確認し、John 列を見つけて、それがどのフィールドであるか (この場合は 11) を返す必要があります。

列 T には Ben という名前があります。ドロップダウン リストから Ben を選択すると、同じフィルターが実行されますが、フィールドは 10 になります。

とにかく、ドロップダウンから選択されたものに応じてフィールド番号を計算できますか?

    Sub Report()
    Dim oSht As Worksheet
    Dim lastRow As Long
    Dim LastCol As Long
    Dim nice As Long
    Dim strSearch As String
    Dim aCell As Range
    Set oSht = Sheets("Overview")
    lastRow = oSht.Range("B" & Rows.Count).End(xlUp).Row
With ActiveSheet.Shapes("Dropdown").ControlFormat
    strSearch = .List(.Value)
End With
    MsgBox strSearch
    Set aCell = oSht.Range("K2:Z100").Find(What:=strSearch, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    If Not aCell Is Nothing Then
         nice = aCell.Column - 10
        ActiveSheet.Range("$K$2:$ZZ$200").AutoFilter Field:=nice, Criteria1:="yes"

        End If
End Sub

これが私がそれを機能させた方法です。ここで、ドロップダウンからオプションを変数として保存し、マクロを設定してフィルターをクリアする方法を知る必要があります。PS - 「オブジェクトが必要です」と言い続けたため、最後の列検索ビットを機能させることができなかったので、代わりに手動で設定しました

4

1 に答える 1

0

acell の current region プロパティを使用して、リージョン内の列番号を取得できます。こちらを参照してください

Sub Report()
    Dim oSht As Worksheet
    Dim lastRow As Long
    Dim LastCol As Long
    Dim nice As Long
    Dim strSearch As String
    Dim aCell As Range
    Set oSht = Sheets("Overview")
    lastRow = oSht.Range("B" & Rows.Count).End(xlUp).Row

    With ActiveSheet.Shapes("Dropdown").ControlFormat
        strSearch = .List(.Value)
    End With

    MsgBox strSearch

    Set aCell = oSht.Range("K2:Z100").Find(What:=strSearch, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    If Not aCell Is Nothing Then
        'nice = aCell.Column - 10
        'ActiveSheet.Range("$K$2:$ZZ$200").AutoFilter Field:=nice, Criteria1:="yes"
        ''''''
         With aCell
           nice = aCell.Column - .CurrentRegion.Cells(1).Column + 1
           ActiveSheet.Range("$K$2:$ZZ$200").AutoFilter Field:=nice,Criteria1:="yes" 'Criteria1:=aCell
         End With
    End If
End Sub

次に、の組み合わせを使用します

Sub ClearCombo()
With Sheets("Sheet1").ComboBox1
    .Clear
End

Sub showAllData()
Worksheets("Sheet1").ShowAllData
End Sub

必要に応じてコンボ ボックスの選択を解除し、すべてのデータを表示します

于 2014-06-10T13:46:17.210 に答える