2016-07-15 4 views
6

में मानदंड के रूप में स्ट्रिंग सरणी का उपयोग करके मैंने अन्य पोस्टों की खोज की है और इसी तरह के मुद्दों को पाया है लेकिन कुछ भी नहीं जो विशेष रूप से मेरी मदद कर सकता है। मैं तारों की एक सरणी लेने और फिल्टर मानदंड के रूप में इसका उपयोग करने की कोशिश कर रहा हूं। यह मुश्किल है क्योंकि सरणी एक फ़ंक्शन द्वारा बनाई गई है और इसमें तत्वों और सामग्रियों की एक चर संख्या है। मुझे इसे लेने के लिए ऑटोफिल्टर की आवश्यकता है और इसके प्रत्येक तत्व के लिए कॉलम ई जांचें।वीबीए ऑटोफिल्टर

मैं इसे दो तरीके

1)

With Sheet17 

.Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr) 

End With 

परिणाम की कोशिश की है: कॉलम E के लिए एक फिल्टर लागू होता है लेकिन विकल्पों में से किसी का चयन करने में विफल रहता है

2)

For i = 0 To counter - 1 

    With Sheet17 

    .Range("E1").AutoFilter Field:=5, Criteria1:=Application.Transpose(arr(i)) 
End With 

Next 

नोट: काउंटर सरणीमें तत्वों की संख्या का प्रतिनिधित्व करने वाला एक पूर्णांक हैपरिणाम: यह एक सरणी के माध्यम से सही ढंग से loops लेकिन केवल फिल्टर पर अंतिम विकल्प का चयन करता है - संभवतः क्योंकि हर बार जब यह वापस लूप करता है तो शुरू होता है और हर दूसरे विकल्प को अनचेक करता है, तो अंत तक केवल सबसे हालिया विकल्प चेक किया जाता है।

उत्तर

5

AutoFilter के लिए एक्सेल दस्तावेज़ कुछ मार्गदर्शन प्रदान करता है। Operator पैरामीटर XlAutoFilterOperator लेता है जो निर्दिष्ट करता है कि Criteria1 का अर्थ कैसे लिया गया है। आपके मामले में, xlFilterValues का मान निर्दिष्ट करने से Criteria1 का कारण फ़िल्टर मानों की सरणी के रूप में ठीक से व्याख्या किया जा सकेगा।

निम्न उदाहरण इस दर्शाता है:

Dim arr As Variant 
arr = Array("Alpha", "Bravo", "Charlie") 

Sheet17.Range("E1").AutoFilter _ 
    Field:=5, _ 
    Criteria1:=arr, _ 
    Operator:=xlFilterValues 
6

आप एक सरणी से एक भी तत्व स्थानांतरित करने के लिए की जरूरत नहीं है और आप मापदंड 5 वें क्षेत्र में नहीं डाल सकते, यदि आप केवल स्तंभ संदर्भित कर रहे हैं ई

जब एक सरणी गुजर
Dim i As Long, arr As Variant 
arr = Array(1, 3) 

With Sheet17 
    'to filter each value in the array one at a time 
    For i = 0 To UBound(arr) 
     .Columns("E").AutoFilter Field:=1, Criteria1:=arr(i) 
    Next i 

    'my values were numbers - AutoFilter likes strings in its array 
    For i = LBound(arr) To UBound(arr) 
     arr(i) = CStr(arr(i)) 
    Next i 

    'to filter all values in the array at once specify xlFilterValues 
    .Columns("E").AutoFilter Field:=1, Criteria1:=arr, _ 
          Operator:=xlFilterValues 
End With 

Operator:=xlFilterValues निर्दिष्ट करें और Range.AutoFilter Method एक सरणी में मानों के रूप में तार पसंद करती है।