使用按钮过滤值

时间:2013-04-16 13:46:37

标签: excel excel-vba vba

我想创建一个按钮,它会在特定列中查找值并按其过滤。

我有7列数据,在顶行我想创建类似搜索栏/列过滤按钮的内容。想法是在单元格B2中输入一个值,然后单击一个按钮使列G按B2中的值排序。

这可能吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,“排序”是指“过滤”,那么您可以执行以下操作。

在工作表上创建一个按钮(功能区上的“开发人员”选项卡,“插入...”按钮),

enter image description here

并在出现提示时,将以下代码添加到Button_Click() Sub:

Private Sub CommandButton1_Click() 
  [G:G].AutoFilter Field:=7, Criteria1:=Range("b2").Value 
End Sub

请注意,不要将按钮放在可能被“过滤”的行上,否则它会消失。此外,如果您对“此值的排序”字段位于第2行,它也可能会消失。

我相信你可以弄清楚如何处理这些事情。

问题的替代解释

如果您希望对特定列进行排序,其名称在单元格B2中给出,那么您的代码可能如下所示:

Option Compare Text
Sub Button1_Click()
Dim sortCol As Integer
Dim headerRange As Range
Dim sortRange as Range

' assuming data to be sorted is in columns E through K
set headerRange = [E1:K1] ' or wherever the headers are
sortCol = WorksheetFunction.Match([B2].Value, headerRange)
' this line for debug:
set sortRange = [E:E].Offset(, sortCol - 1)
MsgBox "you will sort by column " & sortRange.Address

With ActiveSheet
    .Range("E:K").Select
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=sortRange, _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    With .Sort
    .SetRange Range("E:K")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
End With

End Sub