2013-04-16 67 views
0

我想創建一個按鈕,它將查找特定列中的值並按其進行過濾。使用按鈕進行值過濾

我有7列與數據和頂行我想創建像搜索欄/列過濾按鈕。這個想法是在單元格B2中輸入一個值,然後單擊一個按鈕使列G按B2中的值排序。

這可能嗎?

+0

什麼你的意思是「按價值排序」? B2中的值是您想要排序的列的名稱?你試過什麼了? – Floris

+2

是的,這是可能的。記錄一個宏來對範圍進行排序,然後簡單地修改它以接受一個值:)試一試,如果你被卡住了,那麼只需發佈你試過的代碼,我們就會從那裏拿到它... –

+0

它是。我不能讓你現在的例子,但檢查:http://www.get-digital-help.com/excel-sort-using-array-formulas/ – gustavodidomenico

回答

2

如果我的理解正確,通過「排序」你的意思是「過濾器」,那麼你可以做到以下幾點。

創建你的表(在功能區,插入...按鈕,開發人員選項卡)按鈕,

enter image description here

並在提示時,將下面的代碼添加到Button_Click()子:

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 
+1

+ 1多走一步:) –

+0

受你評論的啓發,@SiddharthRout! – Floris

+0

謝謝,我不得不改變它到下面,現在它就像一個魅力! Private Sub CommandButton1_Click() [G:G] .AutoFilter Field:= 7,Criteria1:= Range(「b2」)。Value End Sub – user2030857