2014年4月21日 星期一

Excel:簡化找尋資料的 VBA Filter 小程式

Excel:簡化找尋資料的 VBA Filter 小程式:

由於工作需要,要常在一個龐大的 Excel 資料庫內找尋資料,當然 Excel 內的 Filter 是一個非常不錯的功能,但每次都要化五個步驟 (篩選按鍵 → 自訂 → 選擇條件 → 鍵入條件資料 → 確定)才可完成,所以考慮寫一個 VBAVisual Basic for Applications)簡化找尋資料的小程式,方便工作。

選擇篩選按鍵
篩選按鍵 自訂
篩選按鍵 自訂 選擇條件

篩選按鍵 自訂 選擇條件 鍵入條件資料
篩選按鍵 自訂 選擇條件 鍵入條件資料 確定
Excel VBA 編程:
檔案 開新檔案,打開新檔案 (或按 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%
天氣:多雲

7 則留言:

  1. 您好~

    有機會需要參考您的教學~

    剛好遇到這一段語法有錯誤呢~請您多指教..

    Range("B:B").AutoFilter Field:=ComboBox1.ListIndex + 1, Criteria1:=TextBox1.Text

    回覆刪除
  2. 這句是需要有個 userform 包含 ComboBox1 和 TextBox1 才可以,需要自己 create 一個 userform. ComboBox1 和 TextBox1 是名稱,自己可以改動名稱。請問 Error 訊息是什麼?

    回覆刪除
  3. 您好~

    錯誤訊息與 操作的製作方式,做了一個圖文的文件在Google空間WEB給您看
    http://googledrive.com/host/0B9Lh7dRwBRBAOWhqY0d1VjlZeGM/Excel2003_CallFilter.htm

    非常感謝您願意指教....

    回覆刪除
  4. 收到你的錯誤訊息和程式,已經發現問題所在,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 地址,我將改好的程式傳給你。謝謝!

    回覆刪除
  5. 您好:
    好的,真的是麻煩您了,收到檔案我在研究一下差異在哪..
    謝謝您~
    我的信箱 hsiaochn@hotmail.com

    回覆刪除
  6. 您好:
    我已經改成程式,可以使用了。
    不過我想請教您,怎麼寫出按鈕,可以清除篩選的條件呢??

    回覆刪除
    回覆
    1. 您好:

      我找到答案了,增加一個BUTTOM,加入ActiveSheet.ShowAllData就可以顯示全部資料

      刪除