EXCEL VBA.依〔篩選條件〕將資料複製至〔指定工作表〕
<.准提部林.>
---------------------------------
範例檔簡介:
■程式碼:
Sub 刷新()
Dim MySht As Worksheet, dSht As Worksheet, y&
Set MySht = Sheets("Sheet2")
Set dSht = Sheets("Sheet1")
MySht.Rows("2:65536").Clear
'清除原有資料
dSht.AutoFilterMode = False
'解除篩選模式
y = dSht.Range("B65536").End(xlUp).Row
If y < 2 Then MsgBox "※來源表〔B欄〕無資料! ", 0 + 16: Exit Sub
'↑先解除篩選,再檢測資料尾列列號,若篩選中,檢測列號會有誤差
If WorksheetFunction.CountIf(dSht.Range("C2:C" & y), "~*") = 0 Then
MsgBox "※來源表〔C欄〕無〔*星號〕篩選值! ", 0 + 16: Exit Sub
End If
'↑檢測〔*星號〕數
'注意:"~*"才能單選〔*〕,否則其它文字(例如:A.B.C)也會篩選進來
With dSht
.Range("A1:C" & y).AutoFilter Field:=3, Criteria1:="~*"
.Range("A2:C" & y).Copy MySht.[A2]
.ShowAllData
End With
'↑以〔*星號〕篩選,複製資料,恢復全表
y = MySht.[B65536].End(xlUp).Row
MySht.Range("A2:A" & y).Formula = "=ROW(A1)"
'↑填入〔序號〕公式
Beep
End Sub
■說明1:
複製〔篩選資料〕,不須考慮其篩選的首筆資料是否在第一列,
也不須考慮其篩選的尾筆資料是否在最後一列,
使用〔全域範圍〕複製,其隱藏列並不會被貼出來,
若有必要,連〔標題列〕也可包含進來,但貼上位置須改為A1。
注意:如果使用〔手動〕的〔複製.貼上〕,當第一次貼上時,
若有做〔復原〕動作,後再繼續貼上,則會是貼出〔全域資料〕。
解決方法:重新在篩選範圍執行一次〔複製〕。
■說明2:
在〔範例檔2〕中附加了〔東邪.大師〕的進階程式用法,
此用法在高階的 VBA 中,其應用度非常廣泛,
可惜個人尚無法完全了解其機制,而無法為大家解析。
以此題需求,雖尚用不到此高階語法,但若能學到亦是好事!
註:該程式碼只是提供一個架構,請自行去參解大師的語法。
感謝!
---------------------------------
<範例檔1>:
<範例檔2>:
LV超3A名牌購物網
留言列表