डेटा परिवर्तित होने पर मैं Excel ऑटो फ़िल्टर को ऑटो-रिफ्रेश कैसे कर सकता हूं?
मामले का उपयोग करें: मैं एक सेल के मूल्य को एक मूल्य में बदल देता हूं जिसे फ़िल्टर किया गया था। मैं वर्तमान पंक्ति को बिना कुछ किए गायब होते देखना चाहता हूं।
डेटा परिवर्तित होने पर मैं Excel ऑटो फ़िल्टर को ऑटो-रिफ्रेश कैसे कर सकता हूं?
मामले का उपयोग करें: मैं एक सेल के मूल्य को एक मूल्य में बदल देता हूं जिसे फ़िल्टर किया गया था। मैं वर्तमान पंक्ति को बिना कुछ किए गायब होते देखना चाहता हूं।
जवाबों:
मैंने पाया कि जब मैंने तालिकाओं के साथ काम किया, तो यह काम नहीं किया। फिल्टर शीट पर नहीं बल्कि टेबल पर था। इस कोड ने चाल चली
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1")
.AutoFilter.ApplyFilter
End With
End Sub
मुझे यहां जानकारी मिली: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
अपने शीट नाम पर राइट क्लिक करें, "कोड देखें" चुनें और नीचे दिए गए कोड को पेस्ट करें। चिपकाने के बाद, ऊपर बाईं ओर "फ़ाइल" के नीचे एक्सेल आइकन पर क्लिक करें, या स्प्रेडशीट दृश्य पर वापस जाने के लिए Alt-F11 टाइप करें।
इससे ऑटो रिफ्रेश हो सकेगा। मैक्रो समर्थन झूठ के साथ एक प्रारूप में फ़ाइल को बचाने के लिए मत भूलना .xlsm
।
Private Sub Worksheet_Change(ByVal Target As Range)
If Me.FilterMode = True Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With ActiveWorkbook
.CustomViews.Add ViewName:="Mine", RowColSettings:=True
Me.AutoFilterMode = False
.CustomViews("Mine").Show
.CustomViews("Mine").Delete
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If
End Sub
मैं Worksheet_Change
ईवेंट के आधार पर भी VBA / मैक्रो का उपयोग करता हूं , लेकिन मेरा दृष्टिकोण थोड़ा अलग है ... ठीक है, पहले कोड और फिर स्पष्टीकरण:
Private Sub Worksheet_Change(ByVal Target As Range)
' first remove filter
ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1
' then apply it again
ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1, Criteria1:="<>0"
End Sub
(प्रयोग Alt+ F11कुंजी संयोजन विकास पैनल दिखाई देते हैं और फिल्टर यदि आप ऑटो-ताज़ा हो करना चाहते हैं कार्यपत्रक में कोड पेस्ट बनाने के लिए।)
मेरे उदाहरण में, मैं मान रहा हूं कि एक एकल कॉलम (मेरे मामले में L) पर एक साधारण फ़िल्टर है और मेरी डेटा सीमा 1 से पंक्तियों पर है (भले ही इसमें शीर्षक हो) 126 तक (एक नंबर चुनें जो कि पर्याप्त संख्या में हो) ज़रूर)। ऑपरेशन सरल है: जैसा कि मेरी शीट पर कुछ बदल जाता है, निर्दिष्ट सीमा पर फ़िल्टर हटा दिया जाता है / फिर से लागू किया जाता है ताकि इसे ताज़ा किया जा सके। यहाँ फील्ड और क्राइटेरिया की थोड़ी बहुत व्याख्या की आवश्यकता है ।
फील्ड एक पूर्णांक रेंज के ऑफसेट है। मेरे मामले में, मेरे पास केवल एक एकल स्तंभ फ़िल्टर है और सीमा एकल स्तंभ (L) द्वारा बनाई गई है, जो कि सीमा में पहला है (इसलिए मैं 1 का उपयोग मूल्य के रूप में करता हूं)।
मानदंड एक स्ट्रिंग है कि डेटा श्रृंखला के लिए लागू करने के लिए फिल्टर का वर्णन है। मेरे उदाहरण में, मैं केवल पंक्तियों को दिखाना चाहता हूं जहां एल कॉलम 0 से भिन्न होता है (इसलिए मैंने "<> 0" का उपयोग किया)।
बस इतना ही। Range.AutoFilter विधि पर अधिक संदर्भ के लिए, देखें: https://msdn.microsoft.com/en-us/library/office/ff193884.aspx
बस जवाब को मजबूत करने के लिए:
सोरिन कहते हैं:
अपने शीट नाम पर राइट क्लिक करें, "कोड देखें" चुनें और नीचे दिए गए कोड को पेस्ट करें। चिपकाने के बाद, ऊपर बाईं ओर "फ़ाइल" के नीचे एक्सेल आइकन पर क्लिक करें, या स्प्रेडशीट दृश्य पर वापस जाने के लिए Alt-F11 टाइप करें।
इससे ऑटो रिफ्रेश हो सकेगा। मैक्रो समर्थन झूठ के साथ एक प्रारूप में फ़ाइल को बचाने के लिए मत भूलना .xlsm।
और क्रिस ने इस कोड का उपयोग किया (जो मैंने अभी 2010 में किया था):
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilter.ApplyFilter
End Sub
यदि आप पोस्ट का विस्तार नहीं करते हैं, तो आप केवल लंबे उत्तर देखते हैं! ;)
क्षमा करें, टिप्पणी करने के लिए अपर्याप्त प्रतिनिधि। (Admins, ऊपर टिप्पणी में इसे काटने के लिए स्वतंत्र महसूस करें।) उपयोगकर्ता "danicotra" प्रतिक्रिया की शुरुआत "मैं एक VBA / Macro वर्कशीट_चेंज घटना के आधार पर भी करता हूं, लेकिन मेरा दृष्टिकोण ..."
पहले निकालें फिल्टर के साथ
"फिर इसे लागू करें"
Excel 2007+ का उपयोग करते समय फिर से सही समाधान है। हालाँकि .AutoFilter.ApplyFilter XL03 में अमान्य है और इससे पहले मैं नीचे का रास्ता दिखाता हूँ।
मुझे लगता है कि सच्चे विशेषज्ञों और गुरुओं ने कोड पढ़ा क्योंकि मुझे पूरा विश्वास है कि यह शीर्ष शेल्फ सामग्री है। शायद इस जवाब पर अकथनीय डाउनवोट गिनती उलटी हो सकती है जब लोग देखते हैं कि नीचे क्या अच्छा सामान है।
danicotra ने एक सरलीकृत उदाहरण का उपयोग किया। वास्तव में, आप इसे अधिक सामान्यतः कर सकते हैं। निम्नलिखित (या किसी अन्य शीट ऑब्जेक्ट) के लिए ActiveSheet के साथ मान लें:
ऑटोफिल्टर की रेंज सेव करें। इसमें .AutoFilter.Filters.Count कॉलम और (.AutoFilter.Range.Count / .AutoFilter.Filters.Count) पंक्तियाँ हैं, जिन्हें rngAutofilter में सहेजा गया है।
एक सरणी myAutofilters में से प्रत्येक के 4 गुण में से प्रत्येक में इकट्ठा करें ।AutoFilter.Filters.Count autofilter आइटम, ध्यान रखें कि आप "। (myAutofilters चरण 1 में पंक्तियों और स्तंभों की संख्या के अनुसार होगा)
फ़िल्टर बंद करें लेकिन ड्रॉपडाउन को सुरक्षित रखें .ShowAllData
प्रत्येक फ़िल्टर आइटम के लिए जो आपके सहेजे गए सरणी के अनुसार था, प्रत्येक .AutoFilter.Filters.Count ऑटोफिल्टर आइटम के 4 गुणों में से 3 को रीसेट करें। फिर ध्यान रखें कि जब आप "एप्लिकेशन-डिफाइन्ड एरर" से बचते हैं, जब ओपेरेटर गलत होता है, इसलिए प्रत्येक आइटम "i",
rngAutofilter.AutoFilter फील्ड: = i, Criteria1: = myAutofilters (i, 2)
या
rngAutofilter.AutoFilter Field: = i, Criteria1: = myAutofilters (i, 2), ऑपरेटर: = myAutofilters (i, 3), Criteria2: = myAutofilters (i, 4)
अब ऑटोफिल्टर को उसी सीमा पर फिर से स्थापित किया जाएगा, जैसा आपके कोड के शुरू होने से पहले था, लेकिन डेटा में बदलाव के लिए ऑटोफिल्टर अपडेट किया गया था।
Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
If iNumActiveAutofilters < 1 Then
Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
Exit Sub
End If
ActiveSheet.ShowAllData
Rem Here optionally do stuff which can include changing data or toggling autofilter columns
For i = 1 To iNumAutofilters
If myAutofilters(i, 1) Then
If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
Else
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
End If
Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
End If
'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
Dim i As Long, iRowsAutofiltered As Long
SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
ReDim myAutofilters(1 To iNumAutofilters, 4)
For i = 1 To iNumAutofilters
myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
If myAutofilters(i, 1) Then
SaveAutoFilterInfo = SaveAutoFilterInfo + 1
myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
End If
End If
Next i
iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function
एक्सेल में "डेटा, टेबल से" / पावर क्वेरी का उपयोग करते हुए, जो हमें फ़ाइल खोलने पर डेटा रिफ्रेश करने का विकल्प देता है। (यह भी ऑटो सॉर्ट, और इंडेक्स कॉलम (स्वचालित रूप से फ़िल्टर की गई पंक्तियाँ)) यह एक और शीट में परिणाम पैदा करेगा। माउस (पंक्तियों और स्तंभों) का उपयोग करके आवश्यक डेटा का चयन करें तालिका से डेटा टैब पर क्लिक करें अंतिम कॉलम में, रिक्त स्थान को छोड़ दें (वैकल्पिक, यदि आप केवल भरी हुई कोशिकाओं को प्रदर्शित करना चाहते हैं) -dd कॉलम, इंडेक्स कॉलम (वैकल्पिक, यदि आप फ़िल्टर किए गए परिणामों में पंक्ति संख्या जोड़ना चाहते हैं) -क्लोज करें और लोड करें फिर से संपादित करने के लिए, क्वेरी टैब पर क्लिक करें, और फिर संपादित करें पर एक्सेल में डिज़ाइन टैब पर क्लिक करें, रिफ्रेश, कनेक्शन प्रॉपर्टीज़ के नीचे तीर पर, फ़ाइल खोलने पर डेटा ताज़ा करें। से अनुकूलित: https://www.excelcampus.com/tips/sort-drop-down-lists-automatically/ भाग: 3. पावर क्वेरी का उपयोग करके ड्रॉप डाउन सूची को क्रमबद्ध करना यदि आप खाली नहीं हैं, तो आप शीट 1 से भी डेटा कॉपी कर सकते हैं, उदाहरण के लिए a1। शीट 2 में इसे 1 फ़ील्ड में कॉपी करें: = IF (पत्रक 1 ए 1 "!"; पत्रक 1 ए 1;! "")