由於工作需要,要常在一個龐大的 Excel 資料庫內找尋資料,當然 Excel 內的 Filter 是一個非常不錯的功能,但每次都要化五個步驟 (篩選按鍵 → 自訂 → 選擇條件 → 鍵入條件資料 → 確定)才可完成,所以考慮寫一個 VBA(Visual Basic for Applications)簡化找尋資料的小程式,方便工作。
選擇篩選按鍵 |
篩選按鍵 → 自訂 |
篩選按鍵 → 自訂 → 選擇條件 |
篩選按鍵 → 自訂 → 選擇條件 → 鍵入條件資料 |
篩選按鍵 → 自訂 → 選擇條件 → 鍵入條件資料 → 確定 |
檔案 → 開新檔案,打開新檔案 (或按 Ctrl + N) 。
工具 → 巨集 → Visual Basic 編輯器,進入 VBA 編輯器 (或按 Alt + F11) 。
選擇功能表命令 插入 → 點擊模組 (Insert → Module) 。
編寫 VBA 程式。
執行 VBA 模組 (或按 F5) 。
檔案 → 關閉並回到 Microsoft Excel (或按 Alt + Q) 。
儲存檔案。
Excel VBA 編程 |
F10 → 鍵入條件資料 → 確定 |
顯示 Filter 的結果 |
VBA 程式:
ThisWorkbook:
Private
Sub Workbook_Open()
Application.OnKey "{F10}",
"CallFilter"
End Sub
UserForm1:
Private
Sub CommandButton1_Click()
Range("B:B").AutoFilter
Field:=ComboBox1.ListIndex + 1, Criteria1:=TextBox1.Text
Range("B1").Select
Application.ScreenUpdating = True
Unload Me
End Sub
Private
Sub UserForm_Initialize()
Dim c As Range
Dim rng As Range
Set rng =
ThisWorkbook.Worksheets("Sheet1").Range("A1:AZ1")
For Each c In rng.Cells
If Not IsEmpty(c) Then
Me.ComboBox1.AddItem c.Value
End If
Next c
Me.ComboBox1.ListIndex
= 1
End Sub
Module1 :
Private
Sub CallFilter()
UserForm1.Show
End Sub
|
相關網頁:
◎ RS-232 ﹣用 Excel 做串列介面數據傳輸及接收 (四)
◎ RS-232 ﹣用Excel API做串列介面數據傳輸及接收 (五)
◎ Excel:Customize Menu 如何加入自訂功能表 (一)
◎ Excel:Customize Menu 如何加入自訂功能表 - 範例 (二)
◎ Excel:User Defined Functions (UDF) 自定函數
◎ Excel:排序的順序 Sort order
◎ Excel : VLOOKUP 和 INDEX 函數應用
◎ Excel:CTRL 組合快速鍵
◎ Excel:Function 功能快速鍵
◎ Excel:打開時如何不開啟空白的工作表
◎ Excel:簡化找尋資料的 VBA 小程式
2014 年 4 月 21日 天氣報告
氣溫:24.2 度 @ 20:00
相對濕度:百分之90%
天氣:多雲
您好~
回覆刪除有機會需要參考您的教學~
剛好遇到這一段語法有錯誤呢~請您多指教..
Range("B:B").AutoFilter Field:=ComboBox1.ListIndex + 1, Criteria1:=TextBox1.Text
這句是需要有個 userform 包含 ComboBox1 和 TextBox1 才可以,需要自己 create 一個 userform. ComboBox1 和 TextBox1 是名稱,自己可以改動名稱。請問 Error 訊息是什麼?
回覆刪除您好~
回覆刪除錯誤訊息與 操作的製作方式,做了一個圖文的文件在Google空間WEB給您看
http://googledrive.com/host/0B9Lh7dRwBRBAOWhqY0d1VjlZeGM/Excel2003_CallFilter.htm
非常感謝您願意指教....
收到你的錯誤訊息和程式,已經發現問題所在,1). 你要將 Private Sub Workbook_Open() 程式放在 VBAProject的ThisWorkbook. 因為當 Excel load Workbook 時會設定 F10 功能去 CallFilter程式. 2). Private Sub UseForm1_Initialize 錯誤,不是直接 Copy & paste程式. 應該在左上角選擇 UserForm,在右邊再選擇 Initialize,然後才 Copy 程式,這樣是當 UserForm 開始時,將 Fields load 入 ComboBox 內。你可以告訴我 Email 地址,我將改好的程式傳給你。謝謝!
回覆刪除您好:
回覆刪除好的,真的是麻煩您了,收到檔案我在研究一下差異在哪..
謝謝您~
我的信箱 hsiaochn@hotmail.com
您好:
回覆刪除我已經改成程式,可以使用了。
不過我想請教您,怎麼寫出按鈕,可以清除篩選的條件呢??
您好:
刪除我找到答案了,增加一個BUTTOM,加入ActiveSheet.ShowAllData就可以顯示全部資料