在日常資料分析中,常需要依條件篩選資料並將結果匯出成新檔案或報表。透過 VBA,我們可以建立一個「一鍵篩選」功能,自動依指定條件篩選資料,並將結果匯出至新的 Excel 檔案或 PDF,節省大量人工操作。
功能概述
這段 VBA 程式碼可實現以下功能:
- 自動篩選指定欄位的資料
- 將篩選結果複製到新工作簿
- 將新工作簿儲存為 Excel 檔案(可延伸為 PDF)
- 適用於報表分析、資料清理與成果輸出
VBA 程式碼範例
Sub FilterAndExportData()
Dim ws As Worksheet
Dim rng As Range
Dim NewWB As Workbook
Dim Criteria As String
' 設定篩選條件(以「部門=銷售」為例)
Criteria = "銷售"
' 指定資料範圍(假設資料在 A1:D100)
Set ws = ActiveSheet
Set rng = ws.Range("A1:D100")
' 套用篩選
rng.AutoFilter Field:=2, Criteria1:=Criteria ' 第二欄為部門
' 複製篩選結果到新工作簿
rng.SpecialCells(xlCellTypeVisible).Copy
Set NewWB = Workbooks.Add
NewWB.Sheets(1).Range("A1").PasteSpecial xlPasteValues
' 儲存新工作簿
NewWB.SaveAs Filename:=ThisWorkbook.Path & "\篩選結果.xlsx", FileFormat:=xlOpenXMLWorkbook
NewWB.Close False
' 清除篩選
ws.AutoFilterMode = False
MsgBox "篩選結果已匯出至新檔案", vbInformation
End Sub
程式碼詳細解說(初學者導向)
這段程式碼的目的是篩選資料並將結果匯出至新檔案。以下是逐段說明:宣告變數:
ws指向目前工作表。rng指定要篩選的資料範圍。NewWB是新建立的工作簿。Criteria是篩選條件。
- 設定篩選條件: 這裡以「部門=銷售」為例,將
Criteria設為「銷售」。 - 指定資料範圍: 使用
Range("A1:D100")指定資料範圍,假設資料在 A 到 D 欄。 - 套用篩選: 使用
AutoFilter方法,指定第二欄(部門欄)符合條件的資料。 - 複製篩選結果: 使用
SpecialCells(xlCellTypeVisible)取得篩選後的可見儲存格,並複製到新工作簿。 - 儲存新工作簿: 使用
SaveAs將新檔案儲存為篩選結果.xlsx,並關閉新工作簿。 - 清除篩選: 使用
AutoFilterMode = False清除篩選條件。 - 提示訊息: 使用
MsgBox提示使用者匯出完成。
操作步驟與使用方式
- 將程式碼貼入 Excel 的模組中(例如 Module1)
- 確保資料已存在於指定範圍(A1:D100)
- 執行
FilterAndExportData程式 - 程式會自動篩選並匯出結果至新檔案
應用場景與延伸建議
- 篩選特定部門或日期的報表
- 匯出符合條件的客戶清單
- 教學或作業中快速產出篩選結果
延伸功能建議:
- 加入動態範圍偵測(自動抓取最後一列)
- 支援多條件篩選(例如部門+日期)
- 匯出為 PDF(使用
ExportAsFixedFormat方法) - 加入儲存路徑選擇對話框
常見問題 FAQ
Q1:是否可以篩選多個條件?
可以使用 Criteria1:="=銷售", Operator:=xlOr, Criteria2:="=財務"。
Q2:是否可以自動偵測資料範圍?
可以改用 ws.UsedRange 或 ws.Range("A1").CurrentRegion。
Q3:是否可以匯出為 PDF?
可以在新工作簿中使用 ExportAsFixedFormat Type:=xlTypePDF 方法。
結語與延伸閱讀
這段 VBA 程式碼提供了高效率的「一鍵篩選並匯出結果」功能,適合用於報表分析、資料清理與教學應用。後續可加入多條件篩選、動態範圍偵測與 PDF 匯出模組,打造完整的資料篩選工具。
下一篇將介紹如何「一鍵快速建立目錄與摘要報表」,敬請期待【VBA 自動化教學】第 11 篇~!














