* अंतिम * मैच वापस करने के लिए वीएलबुक कैसे प्राप्त करें?


12

मुझे VLOOKUP के साथ काम करने की आदत है लेकिन इस बार मेरे पास एक चुनौती है। मैं पहला मिलान मूल्य नहीं चाहता, लेकिन अंतिम। कैसे? (मैं लिबरऑफिस कैल्क के साथ काम कर रहा हूं लेकिन एक एमएस एक्सेल समाधान समान रूप से उपयोगी होना चाहिए।)

इसका कारण यह है कि मेरे पास हजारों पंक्तियों के साथ दो पाठ स्तंभ हैं, मान लीजिए कि एक लेन-देन के भुगतानकर्ताओं की एक सूची है (अमेज़ॅन, ईबे, नियोक्ता, किराने की दुकान, आदि) और दूसरा खर्च श्रेणियों (मजदूरी, कर) की एक सूची है घर, किराया आदि)। कुछ लेनदेन में हर बार समान खर्च करने की श्रेणी नहीं होती है, और मैं हाल ही में उपयोग किए गए एक को हड़पना चाहता हूं। ध्यान दें कि सूची न तो कॉलम द्वारा क्रमबद्ध है (वास्तव में तिथि के अनुसार), और मैं क्रम क्रम को बदलना नहीं चाहता।

मेरे पास क्या है (त्रुटि से निपटने के अलावा) सामान्य "पहला-मैच" सूत्र है:

=VLOOKUP( 
[payee field] , [payee+category range] , [index of category column] , 
0 )

मैंने इस तरह के समाधान देखे हैं , लेकिन मुझे #DIV/0!त्रुटियां हैं:

=LOOKUP(2 , 1/( [payee range] = [search value] ) , [category range] )

समाधान कोई भी सूत्र हो सकता है, जरूरी नहीं कि VLOOKUP। मैं आदाता / श्रेणी के कॉलम को स्वैप भी कर सकता हूं। कृपया सॉर्टिंग कॉलम में कोई बदलाव नहीं।


एक समाधान के लिए बोनस अंक जो पिछले के बजाय सबसे लगातार मूल्य चुनता है !

जवाबों:


3

आप अंतिम मिलान रिकॉर्ड से डेटा प्राप्त करने के लिए एक सरणी सूत्र का उपयोग कर सकते हैं।

=INDEX(IF($A$1:$A$20="c",$B$1:$B$20),MAX(IF($A$1:$A$20="c",ROW($A$1:$A$20))))

Ctrl+ Shift+ का उपयोग करके सूत्र दर्ज करें Enter

यह INDEX/ के MATCHनिर्माण की तरह काम करता है VLOOKUP, लेकिन एक सशर्त के MAXबजाय इस्तेमाल किया जाता है MATCH

ध्यान दें कि यह मान लें कि आपकी तालिका पंक्ति 1 से शुरू होती है। यदि आपका डेटा एक अलग पंक्ति में शुरू होता है, तो आपको ROW(...)शीर्ष पंक्ति और 1 के बीच के अंतर को घटाकर भाग को समायोजित करने की आवश्यकता होगी ।


मैं उस शाब्दिक "सी" के बारे में उलझन में हूं - मुझे लगता है कि मूल्यांकन हमेशा गलत होता है, इसलिए यह वास्तव में क्या करता है?
टॉर्बन गुंडोफ़्ते-ब्रून

मैंने आपके सुझाव का परीक्षण किया है (और जाँच लिया है कि इसे एक सरणी सूत्र के रूप में स्वीकार किया गया था)। मुझे लगता है कि कर्नल ए पेयी है और बी श्रेणी है, है ना? दुर्भाग्य से, लिबरऑफिस ने "ईआरआर: 502" लौटाया जो कि "अमान्य तर्क: फ़ंक्शन तर्क में मान्य है। उदाहरण के लिए, SQRT () फ़ंक्शन के लिए एक नकारात्मक संख्या, इसके लिए कृपया IMSQRT ()" का उपयोग करें। मैंने जाँच की कि लिबरऑफिस में उस नाम के साथ सभी फ़ंक्शन मौजूद हैं, लेकिन मुझे आश्चर्य है कि लिबरऑफिस के IFसरणियों को संभाल नहीं सकता है या नहीं।
तोरन गुंडोफ्टे-ब्रून

क्षमा करें, शाब्दिक "सी" सिर्फ पेयी नाम था जिसे आप मिलान करना चाहते थे। यह मेरे नमूना डेटा से एक अवशेष था, जिसके साथ मैं खेल रहा था। मुझे लगता है कि आपकी शीट में एक सेल संदर्भ के साथ प्रतिस्थापित किया जाएगा।
१२:१४ पर एक्सेल

@ TorbenGundtofte-Bruun केयर आपके द्वारा उपयोग किए जा रहे सूत्र को साझा करने के लिए? अगर मैं इसे देख सकता हूं तो मैं इसका निवारण कर सकता हूं। इसके अलावा, आप हमेशा सूत्र के माध्यम से कदम रखने की कोशिश कर सकते हैं कि सूत्र Evaluate Formulaका कौन सा भाग त्रुटि उत्पन्न कर रहा है। यह सुविधा एक्सेल में मौजूद है, और मुझे आश्चर्य होगा कि अगर लिब्रे ऑफिस Calc में समान सुविधा नहीं है।
एक्सेल

मेरा मूल सूत्र सीधा है, इसीलिए यह पर्याप्त नहीं है :-) =VLOOKUP(J1061;$J$2:$K$9999;2;0)जहां col J में payees और col K श्रेणियां हैं। यह उम्मीद के मुताबिक पहला मैच लौटाता है।
तोरन गुंडोफ़्ते-ब्रून

2

(हल किए गए डेटा के लिए कोई अलग प्रश्न के रूप में यहां उत्तर देना।)

यदि डेटा को सॉर्ट किया गया था, तो आप तर्क के VLOOKUPसाथ उपयोग कर सकते हैं (या चूक गए, क्योंकि यह डिफ़ॉल्ट है), जिसे आधिकारिक तौर पर एक्सेल के लिए "अनुमानित मैच की खोज" के रूप में वर्णित किया गया है।range_lookupTRUE

दूसरे शब्दों में, सॉर्ट किए गए डेटा के लिए:

  • पहला मान FALSEवापस करने के लिए अंतिम तर्क सेट करना , और
  • अंतिम मान को TRUEवापस करने के लिए अंतिम तर्क सेट करना ।

यह काफी हद तक अनिर्दिष्ट और अस्पष्ट है, लेकिन VisiCalc (1979) से संबंधित है, और आज कम से कम Microsoft Excel, LibreOffice Calc और Google Sheets में मौजूद है। यह अंततः LOOKUPVisiCalc (और थेंस VLOOKUPऔर HLOOKUP) के प्रारंभिक कार्यान्वयन के कारण है , जब कोई चौथा पैरामीटर नहीं था। मान बाइनरी खोज द्वारा पाया जाता है , जिसमें समावेशी बायीं बाउंड और अनन्य दाएं बाउंड (एक सामान्य और सुरुचिपूर्ण कार्यान्वयन) का उपयोग किया जाता है, जिसके परिणामस्वरूप यह व्यवहार होता है।

तकनीकी रूप से इसका मतलब है कि कोई उम्मीदवार अंतराल के साथ खोज शुरू करता है [0, n), जहां nसरणी की लंबाई है, और लूप इनवेरियंट की स्थिति यह है कि A[imin] <= key && key < A[imax](बाएं बाउंड <= लक्ष्य है, दाएं बाउंड, जो अंत के बाद एक शुरू होता है, यह है) > लक्ष्य को मान्य करने के लिए, या तो पहले समापन बिंदुओं पर मानों की जांच करें, या उसके बाद परिणाम की जांच करें), और क्रमिक रूप से द्विभाजित करना और जो भी पक्ष चुनना है, वह इस अपरिवर्तनीय को संरक्षित करता है: एक पक्ष द्वारा, जब तक कि आप 1 कार्यकाल [k, k+1)और एक अंतराल तक नहीं मिलेंगे, तब तक बहिष्करण करें। एल्गोरिथम फिर लौटता है k। यह एक सटीक मैच नहीं होना चाहिए (!): यह नीचे से सिर्फ निकटतम मैच है। डुप्लिकेट मैचों के मामले में, अंतिम मैच वापस करने के परिणामस्वरूप , क्योंकि इसके लिए आवश्यक है कि अगला मूल्य अधिक होकुंजी (या सरणी के अंत) से। डुप्लिकेट के मामले में आपको कुछ व्यवहार की आवश्यकता होती है, और यह उचित और लागू करने में आसान है।

यह व्यवहार इस पुराने Microsoft ज्ञानकोष आलेख (जोर दिया गया) में स्पष्ट रूप से कहा गया है: "XL: कैसे एक ऐरे में पहला या आखिरी मैच वापस करें" ( Q214069 ):

आप LOOKUP () फ़ंक्शन का उपयोग सॉर्ट किए गए डेटा की एक सरणी के भीतर मान खोजने के लिए कर सकते हैं और उस स्थिति में शामिल संबंधित मान को दूसरे एरे के भीतर वापस कर सकते हैं। यदि लुकअप मान को सरणी के भीतर दोहराया जाता है, तो यह सामने आया अंतिम मैच लौटाता है । यह व्यवहार VLOOKUP (), HLOOKUP (), और LOOKUP () फ़ंक्शन के लिए सही है।

कुछ स्प्रेडशीट के लिए आधिकारिक प्रलेखन का पालन करें; न तो "अंतिम मैच" व्यवहार कहा गया है, लेकिन यह Google पत्रक दस्तावेज़ में निहित है:

  • माइक्रोसॉफ्ट एक्सेल

    TRUE मानता है कि तालिका में पहला कॉलम या तो संख्यात्मक या वर्णानुक्रम में सॉर्ट किया गया है, और फिर निकटतम मान की खोज करेगा ।

  • Google पत्रक :

    अगर is_sortedहै TRUEया छोड़ा जाता है, निकटतम मैच ( कम से कम या बराबर खोज कुंजी करने के लिए) दिया जाता है


वह निकटतम मैच चीज़ मुझे पागल कर रही थी!
davetapley

1

यदि खोज सरणी में मान अनुक्रमिक हैं (जैसे कि आप सबसे बड़े मूल्य की तलाश कर रहे हैं, जैसे कि नवीनतम तिथि), तो आपको INDIRECT फ़ंक्शन का उपयोग करने की भी आवश्यकता नहीं है। इस सरल कोड को आज़माएं:

=MAX(IF($A$1:$A$20="c",$B$1:$B$20,)

फिर से, CTRL + SHIFT + ENTER का उपयोग करके सूत्र दर्ज करें


0

मेरे पास सबसे अधिक मूल्य था। यकीन नहीं है कि यह libreOffice में काम करेगा, लेकिन यह एक्सेल में काम करने लगता है

= INDEX ($ B $ 2: $ B $ 9, मैच (मैक्स (- ($ A $ 2: $ A $ 9 = डी 2) * COUNTIFS ($ B $ 2: $ B $ 9, $ B $ 2: $ B $ 9, $ A $ 2 : $ A $ 9, डी 2)), - ($ A $ 2: $ A $ 9 = डी 2) * COUNTIFS ($ B $ 2: $ B $ 9, $ B $ 2: $ B $ 9, $ A $ 2: $ A $ 9, डी 2 ), 0))

कॉलम A पेयी होगा, कॉलम B श्रेणी होगा, D2 वह पेयी है जिसे आप फ़िल्टर करना चाहते हैं। मुझे यकीन नहीं है कि यह ऊपर दिए गए फ़ंक्शन में अतिरिक्त लाइनब्रेक क्यों डाल रहा है।

अंतिम सेल खोजने का मेरा कार्य इस प्रकार होगा:

= संकेत ("B" और MAX (- ($ A $ 2: $ A $ 9 = D2) * ROW ($ A $ 2: $ A $ 9)))

अप्रत्यक्ष मुझे उस कॉलम को निर्दिष्ट करने देता है जिसे मैं वापस लौटना चाहता हूं और पंक्ति को सीधे खोजना चाहता हूं (इसलिए मुझे हेडर पंक्तियों की संख्या को घटाने की आवश्यकता नहीं है।

इन दोनों कार्यों को Ctrl + Shift + Enter का उपयोग करके दर्ज करने की आवश्यकता है


0
=LOOKUP([payee field] , [payee range] , [category range])

यह आपको अंतिम मूल्य मिलेगा

क्या मुझे 3 साल की देरी से बोनस अंक मिलते हैं?


-1

आपको #DIV/0!त्रुटियां मिलीं क्योंकि आपको अपना सूत्र लिखना चाहिए जैसे:

=LOOKUP(2;IF(([payee range] = [search value]);1;"");[category range])

यह काम करेगा और आखिरी मैच मिलेगा।

([payee range] = [search value]) : बूलियन मैट्रिक्स TRUE / FALSE

IF(([payee range] = [search value]);1;"") : छद्म बूलियन मैट्रिक्स 1 / "

=LOOKUP(2; {pseudo-boolean matrix 1/""} );[category range]): अंतिम 1स्थिति में वापसी


LOOKUPकेवल सॉर्ट की गई सूची पर काम करता है, आपके कॉमरिसन का उत्पादन 1गैर-क्रमबद्ध तरीके से एस और रिक्त स्थान की सूची में होगा, इसलिए यह सही परिणाम नहीं देगा।
Máté Juhász
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.