2015-09-21 17 views
6

का रहस्यमय उपयोग मैं वर्षों से इस एक्सेल फॉर्मूला का उपयोग कर रहा हूं। यह ठीक काम करता है, लेकिन मैं समझना चाहता हूं कि यह क्यों काम करता है! सूत्र का उपयोग सूची में अंतिम संबंधित मान को खोजने के लिए किया जाता है। सी 14 मेंलुकअप

Macro usage example.

सूत्र:: उदाहरण के लिए =LOOKUP(2,1/(B1:B12="meat"),C1:C12)

यहाँ, C14 में सूत्र नवीनतम "meat" लेबल सेल के लिए स्तंभ बी में लग रहा है और सी स्तंभ में जुड़े मान देता है। यह "meat"B9 पर पाता है और संगत रूप से C9 पर मान देता है।

सूत्र का सबसे कठिन हिस्सा "1/(....)" है। यह विभाजन क्या है? यह वाक्यविन्यास कहां से आता है? क्या इसका इस्तेमाल कहीं और किया जा सकता है? लुकअप मान 2 क्यों है?

उत्तर

8

यहाँ क्या हो रहा है: यह

=LOOKUP(2,1/(B1:B12="meat"),C1:C12) 

इस

=LOOKUP(2,1/{TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE},C1:C12) 

जो इस

=LOOKUP(2,{1;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;1;#DIV/0!;#DIV/0!;#DIV/0!},C1:C12) 

B1:B12="meat" हिस्सा सही और गलत मूल्यों की एक सरणी के रूप में मूल्यांकन किया जाता है हो जाता हो जाता है। जब आप सत्य या गलत पर गणित करते हैं तो यह 1 या 0 में बदल जाता है। 1 से 1 या 0 को विभाजित करना सभी फव्वारे के लिए सभी trues और div/0 के लिए 1 देता है।

अब आप जानते हैं कि आपको वास्तव में दो चीजों (या तो 1 या एक div/0) से भरा सरणी है, तो आप किसी भी संख्या को 1 से अधिक की लुकअप कर सकते हैं और यह अंतिम 1 को वापस कर देगा सूची। आप =LOOKUP(800,...) कर सकते हैं और यह अब भी "सबसे बड़ा मान जो लुकअप वैल्यू से कम या उसके बराबर है", या आपके मामले में 1.

तो दोनों कुछ मनमाने ढंग से हैं - यह केवल एक संख्या है जो 1 से अधिक है। इसका क्रूक्स लुकअप सरणी तर्क बनाने के लिए है जिसमें केवल 1s और त्रुटियां शामिल हैं - LOOKUP त्रुटियों को अनदेखा करता है।

बाइनरी खोजें

मैं तो यहाँ अनौपचारिक संस्करण है इस पर आधिकारिक दस्तावेज की जरूरत नहीं है,। लुकअप, ह्लुकअप, और वीएलओकेयूपी में एक तर्क है जहां डेटा को सॉर्ट किया गया है, तो आप फ़ंक्शन को बताते हैं। यदि वह तर्क गलत है, तो फ़ंक्शन अंत तक हर प्रविष्टि को हर तरह से देखता है। यदि वह तर्क सही है या छोड़ा गया है, तो फ़ंक्शन बाइनरी खोज का उपयोग करता है। यह ऐसा करता है - तर्क केवल अस्तित्व में है - क्योंकि एक बाइनरी खोज ओल 'एक-एक-बार की खोज से तेज है।

एक बाइनरी खोज मध्यम मूल्य को ढूंढकर और मांग किए गए मूल्य के विरुद्ध मूल्यांकन करके काम करती है। यदि मध्यम मूल्य बड़ा है, तो दाईं ओर सब कुछ छोड़ दिया जाता है - मांग मूल्य बाईं ओर होना चाहिए। यह बाएं आधा लेता है और इसका मध्य मूल्य पाता है। यदि यह बड़ा है, तो यह दाएं को छोड़ देता है और बाएं रखता है। जब तक आप मूल्य नहीं पाते हैं तब तक पुनरावृत्ति रखें।

तो LOOKUP(2,{1,1,#DIV/0!,1,1,#DIV/0!,1,1},...) क्यों कुछ मनमाने ढंग से 1 के बजाय अंतिम 1 ढूंढता है? मुझे नहीं पता कि एमएस ने अपनी द्विआधारी खोज कैसे लागू की, इसलिए मुझे कुछ धारणाएं करनी हैं।मेरी धारणाएं हैं कि त्रुटि मान सरणी से बाहर फेंक दिए जाते हैं और जब प्रविष्टियों की संख्या (कोई मध्य मूल्य नहीं) होती है, तो मध्य के बाईं ओर का मान उपयोग किया जाता है। उन धारणाएं गलत हो सकती हैं, लेकिन परिणाम पर शून्य पर असर पड़ता है।

सबसे पहले, त्रुटियों को फेंक दें। अब आपके पास ये प्रविष्टियां हैं और उनकी मूल स्थिति

1 1 1 1 1 1 
1 2 4 5 7 8 

"मध्य" संख्या 1 (4) है। यह 2 से कम (मांग मूल्य) से कम है, इसलिए हम सबकुछ बाईं ओर फेंक देते हैं और दाईं ओर पुन: प्रसंस्करण करते हैं। अब हमारे पास

1 1 1 
5 7 8 

मध्यम मान 1 (7) है। यह 2 से कम है, इसलिए हम सबकुछ बाईं ओर फेंक देते हैं और दाईं ओर पुन: प्रसंस्करण करते हैं। अब हमारे पास

1 
8 

हम एक प्रविष्टि में हैं, इसलिए यह जवाब है। यदि मांग मूल्य अन्य सभी मूल्यों से अधिक है, तो एक बाइनरी खोज हमेशा अंतिम मान वापस कर देगी।

+0

आपका मतलब 'बी 1: बी 1 =" मांस "' बी 1: बी 12' है। – ManishChristian

+1

महान जवाब! तो यह एक हैक है! मैंने कभी कल्पना नहीं की है। यह अब मुझे स्पष्ट है। धन्यवाद। –

+0

टाइपो फिक्स्ड। धन्यवाद नेली 27281। –

4

तर्क इस प्रकार है:

  • B1:B12="meat" बूलियन्स की एक सरणी, सही जहां "मांस" और गलत अन्यथा
  • 1/सही रिटर्न 1 देता है, जबकि 1/FALSE = 1/0 रिटर्न # डीआईवी/0 !, तो आपको नीचे दिखाए गए 1 और # DIV/0 से भरा सरणी मिलती है। है, क्योंकि वहाँ कोई (यह कदम कोई त्रुटि मान में गलत कन्वर्ट करने के लिए, तो अगले चरण में उपयोग के लिए प्रयोग किया जाता है।)

enter image description here

  • कि सरणी में मान 2 के लिए लुकअप कर विफल रहता है 2 वहां, और क्योंकि मान निरस्त नहीं हैं। तो इसके बजाय, लुकअप किसी भी # DIV/0 को अनदेखा करते हुए 2 से कम संख्यात्मक संख्या की अंतिम घटना की तलाश करता है! त्रुटि मान क्यूं कर? कौन जाने। यह एक गैर-दस्तावेजी सुविधा, documentation for the LOOKUP function

में नहीं उल्लेख किया तो अनिवार्य रूप से, इस Shenanigan अप्रलेखित व्यवहार पर निर्भर करता है वांछित परिणाम वापस जाने के लिए है।

+0

MATCH फ़ंक्शन के दस्तावेज़ में जांचें: https://support.office.com/en-GB/article/MATCH-function-e8dffd45-c762-47d6-bf89-533f4a37673a चीजों को सॉर्ट करने के तरीके के बारे में स्पष्टीकरण बेहतर हैं – Seb

+0

@ सेब: ठीक है, मैंने इसे देखा, लेकिन मुझे तुम्हारा बिंदु नहीं दिख रहा है। –

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