標題:
AutoFilter 「讀出」Criteria的判別式
[打印本頁]
作者:
mpegwmvavi
時間:
2015-6-18 13:29
標題:
AutoFilter 「讀出」Criteria的判別式
一般常見的都是寫入criteria後進行篩選
譬如要篩選C欄是"甲"或"乙"或"丙"的儲存格
vba語法會是 Column("C:"C").Autofilter field:=1,Criteria1:=Array("甲","乙","丙")
現在我需要的是我有很多欄要進行篩選,
我想把篩選的條件紀錄下來,
之後在其他有同樣欄位的sheet用這些criteria進行篩選
下面語法除了篩選「時間」外運行都ok
思路:
先創建一陣列A,用來儲存每欄的篩選條件
1.先判斷該欄是否有篩選
2.如果是,再判斷Criteria1是否是陣列
若是陣列,則表示篩選數量>=3且criteria2無定義,
=>把criteria1讀入陣列A
3.如果criteria1不是陣列,則篩選數量不是1就是2,
接著判斷1或2的方法是利用operator,如果operator是0,表示篩選數量是1
4.else就一定是篩選數量=2,此時criteria1和criteria2各儲存一個值
Sub 篩選條件()
Range("A1:C10").Autofilter '對A1至C10進行篩選
Dim ConditionArray(1 to 3) '創一陣列,儲存每欄的篩選條件
With Range("A1:C10").Autofilter
For i=1 to .Filters.Count '逐欄判斷
If .Filters(i).On Then '判斷該欄有無篩選
If isarray(.Filters(i).Criteria1) Then
ConditionArr(i)=.Filters(i).Criteria1 '該欄篩選數量>=3,以陣列方式存入ConditionArr
End if
Elseif .Filters(i).Operator Then '如果是0(篩選數量=1)則返回false
ConditionArr(i)=.Filters(i).Criteria1
Else
Dim temp(1 to 2) '創一暫存陣列,讓條件1和2存成陣列
temp(1)=.Filters(i).Criteria1
temp(2)=.Filters(i).Criteria2
ConditionArr(i)= temp 將暫存陣列存入ConditionArr陣列
End if
Next
End with
End sub
複製代碼
之後再讀出即可
For i = 1 To 3
If IsEmpty(CondiArr(i)) Then GoTo Jump
If IsArray(CondiArr(i)) Then
ReDim RedoArr(1 To UBound(CondiArr(i)))
For j = 1 To UBound(CondiArr(i))
RedoArr(j) = Mid(CondiArr(i)(j), 2, Len(CondiArr(i)(j)) - 1) '去除等號
Next j
ActiveSheet.Range(Cells(1, 1), Cells(Last_row, LC2)).AutoFilter Field:=i, Criteria1:=RedoArr, Operator:=xlFilterValues
Else
ActiveSheet.Range(Cells(1, 1), Cells(Last_row, LC2)).AutoFilter Field:=i, Criteria1:=CondiArr(i), Operator:=xlFilterValues
End If
Jump:
Next
複製代碼
我遇到的困難是,如果有某一欄是時間,
且時間譬如篩5月和6月,
這樣在一開始判斷isarray的criteria1時,會出現criteria1應用程式錯誤
且透過criteria2監看式,會發現criteria2也是應用程式錯誤
但透過錄製巨集(錄製篩選時間)會發現時間欄都存在criteria2
要如何才能把篩選時間的條件儲存下來呢?
作者:
mpegwmvavi
時間:
2015-6-19 13:02
回復
1#
mpegwmvavi
QQ",都沒人回
我自己做了個檔案(無時間的欄位篩選,和有時間的欄位篩選)
"篩選1"的工作表運行都ok
可以順利讀出篩選條件,並輸出篩選條件在"輸出篩選條件1"這個sheet
"篩選2"的工作表把第四欄換成時間
在要讀出篩選條件的時候,會出錯
出錯的語句截圖如下
http://iamjo.myweb.hinet.net/Error image.PNG
透過監看式可以得知程式跑到時間這一欄時,criteria1和2都沒有存取任何值
有人知道怎麼讀出時間的篩選條件嗎
希望有高手指點一下,謝謝
檔案:
(一直不能上傳excel,我放在我的空間裡)
http://iamjo.myweb.hinet.net/Autofilter.xls
作者:
mpegwmvavi
時間:
2015-6-19 13:33
回復
2#
mpegwmvavi
找到外國相關的帖子,發問者和我遇到一模一樣的問題XD
http://answers.microsoft.com/en-us/office/forum/office_2007-customize/autofilter-criteria-with-xlfiltervalues-and-dates/90da7c5a-c813-4182-9849-c57ab72dac63
錄製篩選時間欄會發現,篩選的條件儲存在criteria2
但是卻無法把criteria2讀進另一個陣列儲存起來
會出現應用程式錯誤1004
帖子到最後也是無解...
希望版主群能幫幫我啊~~:'(
謝謝
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)