2015-09-28 23 views
5

मेरे पास लगभग दस लाख पंक्तियों वाला शीट है। एक विशेष कॉलम के भीतर, मेरे पास 0 से 50,000 तक की संख्या है।फ़िल्टर की गई रेंज में सशर्त गणना

मैं फ़िल्टर की गई सीमा के भीतर निर्धारित करने की कोशिश कर रहा हूं, फ़िल्टर की गई सीमा में कितनी कोशिकाएं एक निश्चित मूल्य के भीतर आती हैं।

मैं आसानी से एक =COUNTIF(L:L, "<5000") कितने पंक्तियों 5000 से कम, या =COUNTIFS(L:L,">500",L:L,"<5000") कुल श्रेणी की संख्याएं कि दो संख्याओं के बीच गिर देखने के लिए देखने के लिए क्या कर सकते हैं, लेकिन मैं एक में इन के दोनों कैसे करना है को समझ नहीं सकता फ़िल्टर की गई रेंज

आम तौर पर फ़िल्टर किए गए डेटा के साथ मैं =SUBTOTAL फ़ंक्शन का उपयोग करता हूं, लेकिन मैं नहीं देख सकता कि कैसे स्थापित =SUBTOTAL फ़ंक्शंस इस उदाहरण में काम करेगा।

कोई विचार?

+0

क्या आप एक सूत्र या वीबीए कोड का एक टुकड़ा ढूंढ रहे हैं? –

+0

सूत्र अभी अभी - अंततः मैं इसे वीबीए में डाल दूंगा। - ओह, मेरा बुरा - मुझे एहसास नहीं हुआ कि मैंने इसे वीबीए के रूप में टैग किया है ... या तो कोई वास्तव में ठीक होगा .... आखिरकार मैं एक मैक्रो में खत्म होने जा रहा हूं जब भी मैं इसे सब कुछ बाहर कर देता हूं ... –

+0

पंक्तियां एक '.hidden' संपत्ति है (पूर्व 'पंक्तियां (3)। hidden') कि आप यह निर्धारित करने के लिए उपयोग कर सकते हैं कि फ़िल्टर ने एक पंक्ति छिपाई है या नहीं। मैं सिर्फ हर पंक्ति के माध्यम से चलता हूं, यह गिनती करता है कि यह आपके मानदंडों को पूरा करता है और यदि यह छुपा नहीं है। यह वीबीए के लिए है, यदि आप इसका उपयोग करने जा रहे हैं। एक्सेल फॉर्मूला के बारे में निश्चित नहीं है। – user3476534

उत्तर

4

यहाँ एक VBA हल है के लिए है। मैंने कोड पर टिप्पणी की है, इसलिए आपको इसे समझने में कोई समस्या नहीं होनी चाहिए, लेकिन यदि आप ऐसा करते हैं तो बस वापस पोस्ट करें।

Sub Sample() 
    Dim ws As Worksheet 
    Dim lRow As Long, n As Long 
    Dim rng As Range, rngArea As Range 

    '~~> Change this as applicable 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     '~~> Finding last row in Col L 
     lRow = .Range("L" & .Rows.Count).End(xlUp).Row - 1 

     'Debug.Print Intersect(_ 
           .Range("L2:L" & lRow), _ 
           .Range("L1").Offset(1, 0).SpecialCells(xlCellTypeVisible) _ 
          ).Address 

     '~~> This is your range of all visible cells till the last row in column L 
     '~~> except the header: 
     Set rng = Intersect(_ 
           .Range("L2:L" & lRow), _ 
           .Range("L1").Offset(1, 0).SpecialCells(xlCellTypeVisible) _ 
          ) 

     '~~> Since the area could be non contiguous we use Countif per area and add up 
     For Each rngArea In rng 
      n = n + Application.Evaluate("=COUNTIFS(" & rngArea.Address & _ 
             ","">500""," & rngArea.Address & ",""<5000"")") 
     Next 

     Debug.Print n 
    End With 
End Sub 
+0

यह वास्तव में अच्छा है - मुझे यह पसंद है कि आपने इसे कैसे हल किया। प्रयासों के लिए बहुत बहुत धन्यवाद! मैं टिप्पणियों के लिए पूरी तरह से अपनी फैंसी '~~>' चोरी कर रहा हूं .... मानक वीबीए टिप्पणी से काफी अच्छा :) –

+2

'मैं पूरी तरह से टिप्पणियों के लिए अपनी कल्पना' ~~> 'चोरी कर रहा हूं .... 'NOOOO: डी आप' '-> 'यद्यपि उपयोग कर सकते हैं;) –

1

मुझे यकीन है कि यह सबके साथ हुआ है, लेकिन 30 मिनट की तरह इस विषय पर पोस्ट पढ़ने के बाद और कुछ भी नहीं ढूंढने के बाद, मैंने SO पर पोस्ट किया, केवल 4 मिनट बाद समाधान ढूंढने के लिए ...... ।

यह समाधान डेटा स्तंभ एल में है, जहां मानदंड है कि मैं के लिए खोज कर रहा हूँ कि "5000 के तहत"

=SUMPRODUCT(SUBTOTAL(2,OFFSET(L7,ROW(L7:L999999)-ROW(L7),,1)),--(L7:L999999 < 5000)) 
संबंधित मुद्दे