3

我正在尝试使用过滤器选项来过滤我的范围。

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

基本上,这将过滤列 U 为是。
我拥有的是一个下拉列表,我需要它来查找该条目在该范围内的哪个字段。例如,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 的当前区域属性来获取区域内的列号,请参见此处

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 回答