2010-03-23 15 views
5

मेरे पास में एक मामूली आकार का डेटासेट है जिसमें से मैं कॉलम बी में मानों का अधिकतम मूल्य निकालना चाहता हूं, लेकिन जो कॉलम ए में केवल कक्षों से मेल खाते हैं जो कुछ मानदंडों को पूरा करते हैं।एक्सेल MAXIF फ़ंक्शन या इम्यूलेशन?

वांछित कार्यक्षमता SUMIF या COUNTIF के समान है, लेकिन इनमें से कोई भी आवश्यक डेटा वापस नहीं है। MAXIF फ़ंक्शन नहीं है; मैं एक अनुकरण कैसे करूं?

उत्तर

5

आप एक सरणी सूत्र का उपयोग कर सकते हैं। उस सेल में जिसमें आप अधिकतम गणना करना चाहते हैं: = अधिकतम (यदि ([test], [if true], [if false]) जहां आप वर्ग को ब्रैकेट में बदलते हैं परीक्षण के साथ, अगर सही है क्या वापस जाने के लिए और क्या गलत है, तो वापस जाने के लिए उदाहरण के लिए:।

=MAX(IF(MOD(A2:A25,2)=0,A2:A25,0) 

इस सूत्र मैं स्तंभ A में मान अगर 2 से विभाजित मूल्य नहीं शेष है में ध्यान दें कि मैं का उपयोग करें। मेरी तुलना में कोशिकाओं की एक श्रृंखला और मूल्य में यदि एक सेल की बजाय झूठी है।

अब, सेल को संपादित करते समय, Ctrl + Shift + Enter दबाएं (Ctrl कुंजी और Shift को दबाएं गेटर और फिर एंटर दबाएं)।

यह एक सरणी सूत्र बनाता है जो सीमा में प्रत्येक मान पर कार्य करता है।

EDIT बीटीडब्ल्यू, क्या आप इस प्रोग्रामेटिक या मैन्युअल रूप से करना चाहते थे? यदि प्रोग्रामेटिक रूप से, तो आप किस पर्यावरण का उपयोग कर रहे हैं? VBA? सी#?

संपादित VBA के माध्यम से, तुम इतनी तरह FormulaArray संपत्ति और R1C1 संदर्भ का उपयोग करने की आवश्यकता है:

Range("A1").Select 
Selection.FormulaArray = "=MAX(IF(MOD(R[1]C:R[24]C,2)=0,R[1]C:R[24]C,0))" 
3

श्रेणी फ़ार्मुलों बहुत अच्छी तरह से जब आप गतिशील या नामित श्रेणियों का उपयोग करना चाहते काम नहीं करते (जैसे , "वर्तमान पंक्ति के ऊपर पंक्तियों के लिए अधिकतम राशि जो वर्तमान पंक्ति के समान प्रतिपक्ष है)। यदि आप किसी सरणी सूत्र का उपयोग नहीं करना चाहते हैं, तो आप हमेशा ऐसा कुछ करने के लिए वीबीए का सहारा ले सकते हैं:

Function maxIfs(maxRange As Range, criteriaRange As Range, criterion As Variant) As Variant 

    maxIfs = Empty 
    For i = 1 To maxRange.Cells.Count 
    If criteriaRange.Cells(i).Value = criterion Then 
     If maxIfs = Empty Then 
      maxIfs = maxRange.Cells(i).Value 
     Else 
      maxIfs = Application.WorksheetFunction.Max(maxIfs, maxRange.Cells(i).Value) 
     End If 
    End If 
    Next 
End Function 
1

एक लिमी इस प्रकार प्रदान किए गए कोड के साथ टेशन यह है कि आप 2 शर्तों तक सीमित हैं। मैक्सआईएफएस फ़ंक्शन के लिए शर्तों की संख्या को सीमित न करने के लिए मैंने इस कोड को आगे ले जाने का निर्णय लिया। कृपया यहां कोड देखें:

 Function MaxIfs(MaxRange As Range, ParamArray Criteria() As Variant) As Variant 
     Dim n As Long 
     Dim i As Long 
     Dim c As Long 
     Dim f As Boolean 
     Dim w() As Long 
     Dim k As Long 
     Dim z As Variant 

     'Error if less than 1 criteria 
     On Error GoTo ErrHandler 
     n = UBound(Criteria) 
     If n < 1 Then 
      'too few criteria 
      GoTo ErrHandler 
     End If 
      'Define k 
      k = 0    

     'Loop through cells of max range 
     For i = 1 To MaxRange.Count 

     'Start by assuming there is a match 
     f = True 

      'Loop through conditions 
      For c = 0 To n - 1 Step 2 

       'Does cell in criteria range match condition? 
       If Criteria(c).Cells(i).Value <> Criteria(c + 1) Then 
        f = False 
       End If 

      Next c 

      'Define z 
      z = MaxRange 

      'Were all criteria satisfied? 
      If f Then 
       k = k + 1 
       ReDim Preserve w(k) 
       w(k) = z(i, 1) 
      End If 

     Next i 

     MaxIfs = Application.Max(w) 

     Exit Function 
     ErrHandler: 
     MaxIfs = CVErr(xlErrValue) 

    End Function 

यह कोड 1 से कई स्थितियों की अनुमति देता है।

यह कोड हेल वी द्वारा पोस्ट किए गए एकाधिक कोड के संदर्भ में इलिन के लाउंज में विकसित किया गया था।

मुबारक कोडिंग

डाइडरिच

संबंधित मुद्दे