2020年10月24日 星期六

Excel VBA 進階篩選 AdvancedFilter (xlFilterInPlace、xlFilterCopy與CopyToRange)

 進階篩選:

3個基本要素要掌握:

1.資料區:資料各行要有標題,必須是RANGE物件的範圍。

2.條件區:條件各行要有標題,且必須是RANGE物件的範圍。

3.篩選結果原地顯示或複製到指定區域:原地顯示 xlFilterInPlace、 複製到指定區域xlFilterCopy,當設定為"複製到指定區域"時要多設定一個 CopyToRange的參數。

4.不選重複的值:這參數名稱為Unique  ,進階篩選預設為false(不開啟),當開啟時(true),則會以"不選重複的記錄"完成進階篩選,筆者是以不開啟作執行,但是如果你篩選的條件內容是唯一值時,則我會打開,減少比對次數。

其他補充:增有網友留言,可以把條件或資料區放在不同的工作頁面中嗎? ANS:筆者用OFFICE 2010測試,如果你是選用"將篩 選結果複製到其他地方",那"資料範圍"與"複製到"的設定必續在同 一頁歐!!!!但條件區則無此限制。


image

物件設定使用小技巧:

使用 RANGE的End(xlUp).Row 屬性取的最後一列有使用的儲存格位置,這方法跟COUNTA比較後,好處是可以不管空白有無,取得最後一列有使用的儲存格;如同英文的意思是由下往上找第一格有被使用的儲存格,所以空白有無可以不管了。

 A = Sheets("部品出貨").Range("A10000").End(xlUp).Row 

透過SET 直接設定物件的儲存格範圍,這樣比較好操作。

 Set myrange1 = Sheets("XXXXXX").Range("A1" & ":" & "AH" & a)

Set myRange2 = Sheets("XXXXXX").Range("ai1" & ":" & "Ak" & a)

使用完後記得作Set myrange1=nothing 作釋放。

VBA:

xlFilterInPlace:

myrange1.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=myRange2 

xlFilterCopy:

myrange1.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=myRange2 , CopyToRange:=Sheets("XXXXXX").Range("AM1")

沒有留言:

張貼留言

我的雷達:2024/11/15

  似乎有一種不安的味道