एक्सेल - कई मूल्यों को वापस करने के लिए कैसे अनदेखा करें?


18

मैं दिए गए कुंजी के लिए कई संदर्भ मूल्यों को देखने और वापस करने के लिए एक्सेल का उपयोग कर रहा हूं। VLookup कुछ वैसा ही करता है जैसा मुझे चाहिए - लेकिन केवल एक ही मैच लौटाता है।

मुझे लगता है कि इसमें एरे-रिटर्निंग और हैंडलिंग के तरीके शामिल होंगे, हालांकि मैंने पहले इनसे निपटा नहीं है। कुछ गोग्लिंग एक समाधान के हिस्से के रूप में ([लुकअप्रेयर] = [मूल्य], पंक्ति [लुकअप्रे]] पर दुबला होने लगते हैं - हालांकि मैं इसे एक भी मैच नहीं लौटा सकता ...

उदाहरण के लिए, यदि मेरे पास यह संदर्भ डेटा है:

Adam    Red
Adam    Green
Adam    Blue
Bob     Red
Bob     Yellow
Bob     Green
Carl    Red 

मैं दाईं ओर एकाधिक वापसी मान प्राप्त करने का प्रयास कर रहा हूं। (यदि संभव हो तो कोमा अलग हो गया)

Red      Adam, Bob, Carl
Green    Adam, Bob
Blue     Adam
Yellow   Bob

(मेरे पास पहले से ही बाईं ओर मुख्य मूल्य है - उन मूल्यों को बाहर निकालने की कोई आवश्यकता नहीं है)

इस संदर्भ में कई मानों को संभालने के तरीके के बारे में किसी भी मदद को स्वीकार किया जाता है। धन्यवाद।

जवाबों:


13

यह मानते हुए कि आप एक सूत्र दृष्टिकोण चाहते हैं (VLOOKUP का उपयोग नहीं, लेकिन अभी भी एक सूत्र), यहाँ बताया गया है कि मैंने डेटा कैसे रखा है:

डेटा लेआउट

मैंने तब सेल C12 में निम्न सूत्र का उपयोग किया:

=INDEX($C$2:$C$8, SMALL(IF($B12=$B$2:$B$8, ROW($B$2:$B$8)-MIN(ROW($B$2:$B$8))+1, ""), 1))

यह एक सरणी सूत्र है, ताकि आप इसे उस सेल में कॉपी और पेस्ट कर सकें, जिसे आपको हिट करना है Ctrl+Shift+Enter। मैंने तब इसे दाईं ओर और नीचे तक खींच लिया।

यदि कोई मूल्य नहीं है, तो यह #NUM!त्रुटि देता है , मैंने अपलोड की गई छवि उदाहरण में पीले रंग के लिए एक उदाहरण दिया।

मुझे लगता है कि यदि आपके पास पंक्तियों का एक वीबीए / मैक्रो दृष्टिकोण बेहतर समाधान होगा।


पुनर्प्राप्त किए गए मानों को देखने के लिए (जहाँ ऑर्डर से कोई फर्क नहीं पड़ता), IF को एक सरणी के साथ उपयोग करना सरल है:=SUM(IF($B$2:$B$8="Key", $C$2:$C$8, 0))
अरालॉक्स

मैं इस सूत्र की कोशिश की, लेकिन उत्पादन मैं नीचे खींच रहा हूँ और नीचे केवल एडम और बॉब देता है - मैं कुछ गलत कर रहा हूँ? यहां स्क्रीनशॉट देखें snag.gy/qW7UKM.jpg
ziggy

@ जिगी क्या आपने ctrl + shift + एंटर मारा?
दान

5
  1. कॉलम को स्वैप करें ताकि रंग कॉलम A में हों और नाम कॉलम B में हों, और फिर रंग पर सॉर्ट करें।

  2. C2 में सूत्र (इसे कॉलम को कॉपी करें): = IF (A2 <> A1, B2, C1 & "," & B2)

  3. D2 में फॉर्मूला (कॉलम को कॉपी करें): = A2 <> A3

  4. वांछित परिणाम प्राप्त करने के लिए कॉलम D पर "TRUE" के लिए फ़िल्टर करें। निचे देखो:

यहाँ छवि विवरण दर्ज करें


TIL आप क्लूनी कॉन्कैटनेट () फॉर्मूला के बजाय "&" ऑपरेटर का उपयोग कर सकते हैं। धन्यवाद!
bpcookson

3

यदि आप एक सूत्र दृष्टिकोण चाहते हैं तो अलग-अलग कक्षों में परिणाम प्राप्त करना बहुत सरल है, इसलिए मान लें कि आपकी पहली तालिका A2: B8 है और रंग फिर से D2: D5 में सूचीबद्ध हैं। E2 में इस सूत्र का प्रयास करें

=IFERROR(INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))),"")

के साथ CTRL+SHIFT+ENTERऔर नीचे और नीचे नकल की पुष्टि की । जब मैच रन आउट हो जाते हैं तो आप खाली हो जाते हैं।

फॉर्मूला एक्सेल 2007 या बाद में मान लेता है - यदि पूर्व संस्करण में आप IFERROR के बजाय COUNTIF का उपयोग कर सकते हैं, अर्थात

=IF(COLUMNS($E2:E2)>COUNTIF($B$2:$B$8,$D2),"",INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))))


3

यहां आपके लिए VBA समाधान दिया गया है। सबसे पहले, यह वही है जो परिणाम दिखता है:

स्क्रीनशॉट

और यहाँ कोड है:

Option Explicit
Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, resultsRange As Range) As String

    Dim s As String 'Results placeholder
    Dim sTmp As String  'Cell value placeholder
    Dim r As Long   'Row
    Dim c As Long   'Column
    Const strDelimiter = "|||"  'Makes InStr more robust

    s = strDelimiter
    For r = 1 To lookupRange.Rows.Count
        For c = 1 To lookupRange.Columns.Count
            If lookupRange.Cells(r, c).Value = lookupValue Then
                'I know it's weird to use offset but it works even if the two ranges
                'are of different sizes and it's the same way that SUMIF works
                sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
                If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                    s = s & sTmp & strDelimiter
                End If
            End If
        Next
    Next

    'Now make it look like CSV
    s = Replace(s, strDelimiter, ",")
    If Left(s, 1) = "," Then s = Mid(s, 2)
    If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

    LookupCSVResults = s 'Return the function

End Function
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.