我想创建一个按钮,该按钮将在特定列中查找值并按其过滤。
我有 7 列数据,在第一行我想创建类似搜索栏/列过滤按钮的东西。这个想法是在单元格 B2 中输入一个值,然后单击一个按钮以使 G 列按 B2 中的值排序。
这可能吗?
如果我正确理解“排序”是指“过滤”,那么您可以执行以下操作。
在工作表上创建一个按钮(功能区上的开发人员选项卡,插入...按钮),
出现提示时,将以下代码添加到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