এক্সেল - একাধিক মান ফেরত দিতে কীভাবে ভিউকআপ করা যায়?


18

আমি প্রদত্ত কীটির জন্য একাধিক রেফারেন্স মানগুলি সন্ধান করতে এবং এক্সেল ব্যবহার করতে চাই। ভি লুকআপ আমার যা প্রয়োজন তার সাথে খুব সামান্য কিছু করে - তবে কেবল একটি ম্যাচ ফেরত returns

আমি ধরে নিয়েছি এটিতে অ্যারে-রিটার্নিং এবং হ্যান্ডলিংয়ের পদ্ধতি জড়িত থাকবে, যদিও আমি এর আগে এর সাথে ডিল করি নি। কিছু গুগলিং যদি সমাধানের অংশ হিসাবে যদি ([লক্কুচারএ = = [মান], সারি [লুকোচুরিরে]) ঝুঁকতে শুরু করে - যদিও আমি এটি একক ম্যাচ ফিরতে পারি না ...

উদাহরণস্বরূপ, আমার কাছে যদি এই রেফারেন্স ডেটা থাকে:

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 ব্যবহার না করে, তবে একটি সূত্র), এখানে আমি কীভাবে ডেটা রেখেছি:

ডেটা বিন্যাস

আমি তখন সেল সি 12 এ নিম্নলিখিত সূত্রটি ব্যবহার করেছি:

=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!ত্রুটি দেয় , আমি আপলোড করা চিত্রের উদাহরণে হলুদ রঙের উদাহরণ দিয়েছি।

আমি মনে করি আপনার কাছে প্রচুর সারি থাকলে একটি ভিবিএ / ম্যাক্রো পদ্ধতির একটি ভাল সমাধান হতে পারে।


যারা পুনরুদ্ধার করা মানগুলির সমষ্টি খুঁজছেন (যেখানে অর্ডারটি কোনও ব্যাপার নয়), যদি কোনও অ্যারের সাথে আইএফ ব্যবহার করা সহজ হয়:=SUM(IF($B$2:$B$8="Key", $C$2:$C$8, 0))
অ্যারালাক্স

আমি এই সূত্রটি চেষ্টা করেছিলাম কিন্তু কেবল আডাম এবং ববকেই কেবল নীচে এবং পরে টেনে আনার পরে আমি যে আউটপুটটি পাচ্ছি তা কি আমি কিছু ভুল করছি? স্ক্রিনশটটি এখানে দেখুন snag.gy/qW7UKM.jpg
জিগজি

@ জিগি আপনি কি সিটিআরএল + শিফট + প্রবেশ করেছেন?
ড্যান

5
  1. কলামগুলি অদলবদল করুন যাতে রঙগুলি কলাম A এ থাকে এবং নামগুলি কলাম B এ থাকে এবং তারপরে রঙটি সাজান।

  2. সি 2-তে সূত্র (কলামটি এটি কপি করুন): = আইএফ (এ 2 <> এ 1, বি 2, সি 1 এবং "," এবং বি 2)

  3. ডি 2-তে সূত্র (কলামটি এটি কপি করুন): = এ 2 <> এ 3

  4. পছন্দসই ফলাফল পেতে কলাম ডি তে "সত্য" এর জন্য ফিল্টার করুন। নিচে দেখ:

এখানে চিত্র বর্ণনা লিখুন


টিআইএল আপনি আটকানো কনক্যাটেনেট () সূত্রের পরিবর্তে "&" অপারেটরটি ব্যবহার করতে পারেন। ধন্যবাদ!
বিপিউকসন

3

আপনি যদি কোনও সূত্রের পদ্ধতির চান তবে পৃথক কক্ষে ফলাফল পাওয়া অনেক সহজ, সুতরাং ধরে নেওয়া যাক আপনার প্রথম টেবিলটি A2: B8 এবং রংগুলি আবার ডি 2: ডি 5 এ তালিকাভুক্ত করা হয়েছে। 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এবং অনুলিপি এবং নীচে cop ম্যাচগুলি শেষ হয়ে গেলে আপনি ফাঁকা পান।

সূত্রটি এক্সেল 2007 বা তার পরে গ্রহণ করে - যদি পূর্ববর্তী সংস্করণ হয় তবে আপনি আইএফআরআর এর পরিবর্তে 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

আপনার জন্য ভিবিএ সমাধান এখানে। প্রথমত, ফলাফলগুলি দেখতে এটির মতো:

স্ক্রিনশট

এবং এখানে কোড:

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.