सामग्रीहरू
हाल, माइक्रोसफ्ट एक्सेलमा फंक्शन विजार्ड विन्डो बटन मार्फत लगभग पाँच सय कार्यपत्र कार्यहरू उपलब्ध छन् fx सूत्र पट्टी मा। यो एक धेरै सभ्य सेट हो, तर, जे होस्, लगभग हरेक प्रयोगकर्ताले चाँडै वा पछि एक परिस्थितिको सामना गर्दछ जहाँ यो सूचीले उसलाई आवश्यक कार्य समावेश गर्दैन - केवल किनभने यो एक्सेलमा छैन।
अहिलेसम्म, यो समस्या समाधान गर्ने एक मात्र तरिका म्याक्रो थियो, अर्थात् भिजुअल बेसिकमा आफ्नै प्रयोगकर्ता-परिभाषित प्रकार्य (UDF = प्रयोगकर्ता परिभाषित प्रकार्य) लेख्ने, जसलाई उपयुक्त प्रोग्रामिङ सीपहरू चाहिन्छ र कहिलेकाहीँ सजिलो हुँदैन। यद्यपि, नवीनतम Office 365 अद्यावधिकहरूसँग, स्थिति राम्रोको लागि परिवर्तन भएको छ - एक्सेलमा विशेष "रेपर" प्रकार्य थपिएको छ। LAMBDA। यसको मद्दतले, तपाईंको आफ्नै प्रकार्यहरू सिर्जना गर्ने कार्य अब सजिलै र सुन्दर तरिकाले हल गरिएको छ।
निम्न उदाहरणमा यसको प्रयोगको सिद्धान्त हेरौं।
तपाईलाई सम्भवतः थाहा छ, एक्सेलमा धेरै मिति पार्सिङ प्रकार्यहरू छन् जसले तपाइँलाई दिइएको मितिको लागि दिन, महिना, हप्ता, र वर्षको संख्या निर्धारण गर्न अनुमति दिन्छ। तर केही कारणका लागि त्यहाँ कुनै प्रकार्य छैन जसले क्वार्टरको संख्या निर्धारण गर्दछ, जुन प्रायः आवश्यक हुन्छ, हैन? यो कमजोरीलाई सच्याऔं र सृजना गरौं LAMBDA यो समस्या समाधान गर्न आफ्नै नयाँ प्रकार्य।
चरण 1. सूत्र लेख्नुहोस्
यस तथ्यको साथ सुरू गरौं कि म्यानुअल रूपमा सामान्य तरिकामा हामी पाना सेलमा सूत्र लेख्नेछौं जुन हामीलाई के चाहिन्छ गणना गर्दछ। त्रैमासिक संख्या को मामला मा, यो गर्न सकिन्छ, उदाहरण को लागी, यो जस्तै:
चरण 2. LAMBDA मा र्यापिङ र परीक्षण
अब यो नयाँ LAMBDA प्रकार्य लागू गर्ने र यसमा हाम्रो सूत्र लपेट्ने समय हो। प्रकार्य वाक्य रचना निम्नानुसार छ:
=LAMBDA(चल १; चल १; … चरN ; अभिव्यक्ति)
जहाँ एक वा बढी चरका नामहरू पहिले सूचीबद्ध हुन्छन्, र अन्तिम तर्क सधैं एक सूत्र वा गणना गरिएको अभिव्यक्ति हो जसले तिनीहरूलाई प्रयोग गर्दछ। चल नामहरू सेल ठेगानाहरू जस्तो देखिनु हुँदैन र थोप्लाहरू समावेश हुनु हुँदैन।
हाम्रो अवस्थामा, त्यहाँ एउटा मात्र चर हुनेछ - मिति जसको लागि हामीले क्वार्टर नम्बर गणना गर्छौं। यसको लागि चर कल गरौं, भन्नुहोस्, डी। त्यसपछि एउटा प्रकार्यमा हाम्रो सूत्र लपेट्दै LAMBDA र मूल सेल A2 को ठेगानालाई काल्पनिक चर नामको साथ प्रतिस्थापन गर्दै, हामी पाउँछौं:
कृपया ध्यान दिनुहोस् कि यस्तो परिवर्तन पछि, हाम्रो सूत्र (वास्तवमा, सही!) त्रुटि उत्पन्न गर्न थाल्यो, किनकि अब सेल A2 बाट मूल मिति यसमा स्थानान्तरण गरिएको छैन। परीक्षण र विश्वासको लागि, तपाइँ यसलाई प्रकार्य पछि थपेर तर्कहरू पास गर्न सक्नुहुन्छ LAMBDA कोष्ठक मा:
चरण 3. एउटा नाम सिर्जना गर्नुहोस्
अब सजिलो र रमाईलो भागको लागि। हामी खोल्छौं नाम प्रबन्धक ट्याब सूत्र (सूत्रहरू - नाम प्रबन्धक) र बटनको साथ नयाँ नाम सिर्जना गर्नुहोस् सिर्जना (सिर्जना गर्नुहोस्)। आउनुहोस् र हाम्रो भविष्यको प्रकार्यको लागि नाम प्रविष्ट गर्नुहोस् (उदाहरणका लागि, नोमकवर्तला), र क्षेत्रमा लिङ्क (सन्दर्भ) ध्यानपूर्वक सूत्र पट्टीबाट प्रतिलिपि गर्नुहोस् र हाम्रो प्रकार्य टाँस्नुहोस् LAMBDA, अन्तिम तर्क बिना मात्र (A2):
सबै कुरा। क्लिक गरेपछि OK सिर्जना गरिएको प्रकार्य यस कार्यपुस्तिकाको कुनै पनि पानाको कुनै पनि कक्षमा प्रयोग गर्न सकिन्छ:
अन्य पुस्तकहरूमा प्रयोग गर्नुहोस्
LAMBDA र गतिशील arrays
एक प्रकार्य संग सिर्जना गरिएको अनुकूलन प्रकार्यहरू LAMBDA सफलतापूर्वक नयाँ गतिशील arrays र तिनीहरूका कार्यहरू (FILTER, अनौठो, ग्रेड2020 मा Microsoft Excel मा थपियो।
मानौं हामी नयाँ प्रयोगकर्ता-परिभाषित प्रकार्य सिर्जना गर्न चाहन्छौं जसले दुई सूचीहरू तुलना गर्नेछ र तिनीहरू बीचको भिन्नता फर्काउनेछ - पहिलो सूचीबाट ती तत्वहरू जुन दोस्रोमा छैनन्। जीवनको काम, हैन र? पहिले, यसका लागि तिनीहरूले या त प्रकार्यहरू प्रयोग गर्थे a la VPR (VLOOKUP), वा PivotTables, वा Power Query क्वेरीहरू। अब तपाइँ एक सूत्र संग गर्न सक्नुहुन्छ:
अंग्रेजी संस्करणमा यो हुनेछ:
=LAMBDA(a;b;ФИЛЬТР(a;СЧЁТЕСЛИ(b;a)=0))(A1:A6;C1:C10)
यहाँ समारोह COUNTIF दोस्रोमा पहिलो सूचीको प्रत्येक तत्वको घटनाहरूको सङ्ख्या गणना गर्छ, र त्यसपछि प्रकार्य FILTER यी घटनाहरू नभएकाहरूलाई मात्र चयन गर्दछ। यस संरचनालाई लपेटेर LAMBDA र यसको आधारमा नामको दायरा सिर्जना गर्दै, उदाहरणका लागि, खोज वितरण - हामी एक सुविधाजनक प्रकार्य प्राप्त गर्नेछौं जुन एक गतिशील एरे को रूप मा दुई सूचिहरु को तुलना को परिणाम फर्काउँछ:
यदि स्रोत डेटा सामान्य छैन, तर "स्मार्ट" तालिकाहरू, हाम्रो प्रकार्यले पनि समस्या बिना सामना गर्नेछ:
अर्को उदाहरण गतिशील रूपमा पाठलाई XML मा रूपान्तरण गरेर र त्यसपछि हामीले हालै पार्स गरेको FILTER.XML प्रकार्य प्रयोग गरेर सेलद्वारा सेल पार्स गर्ने हो। यस जटिल सूत्रलाई प्रत्येक पटक म्यानुअल रूपमा पुन: उत्पादन नगर्नको लागि, यसलाई LAMBDA मा लपेट्न र त्यसमा आधारित गतिशील दायरा सिर्जना गर्न सजिलो हुनेछ, अर्थात् नयाँ कम्प्याक्ट र सुविधाजनक प्रकार्य, यसको नामकरण, उदाहरणका लागि, RAZDTEXT:
यस प्रकार्यको पहिलो तर्क स्रोत पाठको साथ सेल हुनेछ, र दोस्रो - विभाजक क्यारेक्टर, र यसले परिणामलाई तेर्सो गतिशील एरेको रूपमा फर्काउनेछ। प्रकार्य कोड निम्नानुसार हुनेछ:
=LAMBDA(t;d; ट्रान्सपोज(फिल्टर. एक्सएमएल(“
उदाहरणहरूको सूची अनन्त छ - कुनै पनि परिस्थितिमा जहाँ तपाइँ प्राय: एउटै लामो र बोझिलो सूत्र प्रविष्ट गर्नुपर्दछ, LAMBDA प्रकार्यले जीवनलाई उल्लेखनीय रूपमा सजिलो बनाउँदछ।
वर्णहरूको पुनरावर्ती गणना
अघिल्ला सबै उदाहरणहरूले LAMBDA प्रकार्यको एउटा मात्र, सबैभन्दा स्पष्ट, पक्ष देखाएको छ - यसमा लामो सूत्रहरू र्याप गर्न र तिनीहरूको इनपुटलाई सरल बनाउनको लागि "रेपर" को रूपमा यसको प्रयोग। वास्तवमा, LAMBDA सँग अर्को, धेरै गहिरो, पक्ष छ जसले यसलाई लगभग पूर्ण प्रोग्रामिङ भाषामा परिणत गर्दछ।
तथ्य यो हो कि LAMBDA प्रकार्यहरूको मौलिक रूपमा महत्त्वपूर्ण विशेषता तिनीहरूलाई कार्यान्वयन गर्ने क्षमता हो पुनरावृत्ति - गणनाको तर्क, जब गणनाको प्रक्रियामा प्रकार्यले आफैलाई कल गर्छ। बानीबाट, यो डरलाग्दो लाग्न सक्छ, तर प्रोग्रामिङमा, पुनरावृत्ति एक सामान्य कुरा हो। भिजुअल बेसिकमा म्याक्रोहरूमा पनि, तपाइँ यसलाई लागू गर्न सक्नुहुन्छ, र अब, तपाइँ देख्न सक्नुहुन्छ, यो एक्सेलमा आएको छ। एक व्यावहारिक उदाहरण संग यो प्रविधि बुझ्न प्रयास गरौं।
मानौं हामी प्रयोगकर्ता-परिभाषित प्रकार्य सिर्जना गर्न चाहन्छौं जसले स्रोत पाठबाट दिइएको सबै क्यारेक्टरहरू हटाउनेछ। यस्तो प्रकार्यको उपयोगिता, मलाई लाग्छ, तपाईंले प्रमाणित गर्न आवश्यक छैन - यसको मद्दतले फोहोर इनपुट डाटा खाली गर्न धेरै सुविधाजनक हुनेछ, हैन?
यद्यपि, अघिल्लो, गैर-पुनरावर्ती उदाहरणहरूको तुलनामा, दुई कठिनाइहरू हामीलाई पर्खिरहेका छन्।
- हामीले यसको कोड लेख्न सुरु गर्नु अघि हामीले हाम्रो प्रकार्यको लागि एउटा नामको साथ आउनु पर्छ, किनभने यसमा, यो नाम पहिले नै प्रकार्यलाई कल गर्न प्रयोग गरिनेछ।
- यस्तो पुनरावर्ती प्रकार्यलाई कक्षमा प्रविष्ट गर्दा र LAMBDA (हामीले पहिले जस्तै) पछि कोष्ठकहरूमा तर्कहरू निर्दिष्ट गरेर यसलाई डिबग गर्ने काम गर्दैन। तपाईंले तुरुन्तै "स्क्र्याचबाट" एक प्रकार्य सिर्जना गर्नुपर्नेछ नाम प्रबन्धक (नाम प्रबन्धक).
हाम्रो प्रकार्यलाई कल गरौं, भन्नुहोस्, CLEAN र हामी यसमा दुईवटा तर्कहरू राख्न चाहन्छौं - पाठ सफा गर्न र पाठ स्ट्रिङको रूपमा बहिष्कृत वर्णहरूको सूची:
ट्याबमा हामीले पहिले जस्तै सिर्जना गरौं सूत्र в नाम प्रबन्धक दायरा नाम दिनुहोस्, यसलाई CLEAR नाम दिनुहोस् र फिल्डमा प्रविष्ट गर्नुहोस् सीमा निम्न निर्माण:
=LAMBDA(t;d;IF(d="";t;CLEAR(SUBSTITUTE(t;LEFT(d);"");MID(d;2;255))))
यहाँ भ्यारीएबल t सफा गर्नको लागि मूल पाठ हो, र d मेटिने क्यारेक्टरहरूको सूची हो।
यो सबै यो जस्तै काम गर्दछ:
Iteration १
टुक्रा SUBSTITUTE(t;LEFT(d);""), तपाईले अनुमान गर्न सक्नुहुन्छ, स्रोत पाठ t मा मेटिने सेट d बाट बायाँ क्यारेक्टरको पहिलो क्यारेक्टरलाई खाली टेक्स्ट स्ट्रिङले बदल्छ, अर्थात् "हटाउँछ। ए”। मध्यवर्ती परिणामको रूपमा, हामी पाउँछौं:
Vsh zkz n 125 रूबल।
Iteration १
त्यसपछि प्रकार्यले आफैलाई कल गर्छ र इनपुटको रूपमा (पहिलो तर्क) ले अघिल्लो चरणमा सफा गरेपछि बाँकी रहेको प्राप्त गर्दछ, र दोस्रो तर्क पहिलोबाट होइन, तर दोस्रो क्यारेक्टरबाट सुरु हुने बहिष्कृत क्यारेक्टरहरूको स्ट्रिङ हो, अर्थात् “BVGDEEGZIKLMNOPRSTUFHTSCHSHSHCHYYYA। ," प्रारम्भिक "A" बिना - यो MID प्रकार्य द्वारा गरिन्छ। पहिले जस्तै, प्रकार्यले बाँकीहरू (B) को बायाँबाट पहिलो क्यारेक्टर लिन्छ र यसलाई दिइएको पाठमा (Zkz n 125 rubles) खाली स्ट्रिङमा बदल्छ - हामी मध्यवर्ती परिणामको रूपमा प्राप्त गर्छौं:
125 रु।
Iteration १
पहिलेको पुनरावृत्ति (Bsh zkz n 125 ru.) मा खाली गर्नको लागि पाठको बाँकी रहेको पहिलो तर्कको रूपमा प्राप्त गर्दै, र दोस्रो तर्कको रूपमा, बहिष्कृत क्यारेक्टरहरूको सेटलाई अर्को क्यारेक्टरले काटेको छ। बायाँ, अर्थात् "VGDEEGZIKLMNOPRSTUFHTSCHSHSHSHCHYYYUYA।" प्रारम्भिक "B" बिना। त्यसोभए यसले फेरि यो सेटबाट बायाँ (B) बाट पहिलो क्यारेक्टर लिन्छ र यसलाई पाठबाट हटाउँछ - हामीले प्राप्त गर्छौं:
sh zkz n 125 ru।
र यस्तै - मलाई आशा छ कि तपाईंले विचार पाउनुभयो। प्रत्येक पुनरावृत्तिको साथ, हटाउनु पर्ने क्यारेक्टरहरूको सूची बायाँ तिर काटिनेछ, र हामी खोजी गर्नेछौं र सेटबाट अर्को क्यारेक्टरलाई शून्यसँग बदल्नेछौं।
जब सबै क्यारेक्टरहरू रन आउट हुन्छन्, हामीले लूपबाट बाहिर निस्कनु पर्ने हुन्छ - यो भूमिका केवल प्रकार्यद्वारा गरिन्छ IF (यदि), जसमा हाम्रो डिजाइन बेरिएको छ। यदि त्यहाँ कुनै क्यारेक्टरहरू मेटाउन बाँकी छैन भने (d=""), त्यसपछि प्रकार्यले अब आफैलाई कल गर्नु हुँदैन, तर केवल यसको अन्तिम रूपमा खाली गर्नको लागि पाठ फिर्ता गर्नुपर्छ (चर t)।
कक्षहरूको पुनरावर्ती पुनरावृत्ति
त्यसै गरी, तपाईंले दिइएको दायरामा कक्षहरूको पुनरावर्ती गणना लागू गर्न सक्नुहुन्छ। मानौं हामी नामको lambda प्रकार्य सिर्जना गर्न चाहन्छौं प्रतिस्थापन सूची दिइएको सन्दर्भ सूची अनुसार स्रोत पाठमा टुक्राहरूको थोक प्रतिस्थापनको लागि। परिणाम यस्तो हुनुपर्छ:
ती। हाम्रो समारोहमा प्रतिस्थापन सूची त्यहाँ तीन तर्क हुनेछ:
- प्रशोधन गर्न पाठ भएको सेल (स्रोत ठेगाना)
- लुकअपबाट खोजी गर्न मानहरू भएको स्तम्भको पहिलो कक्ष
- लुकअपबाट प्रतिस्थापन मानहरूसँग स्तम्भको पहिलो कक्ष
प्रकार्य डाइरेक्टरीमा माथि देखि तल जानु पर्छ र क्रमिक रूपमा बायाँ स्तम्भबाट सबै विकल्पहरू प्रतिस्थापन गर्नुपर्छ खोज्न को लागि दायाँ स्तम्भबाट सम्बन्धित विकल्पहरूमा उपन्यास। तपाइँ यसलाई निम्न पुनरावर्ती lambda प्रकार्य संग लागू गर्न सक्नुहुन्छ:
प्रत्येक पुनरावृत्तिमा तल शिफ्ट एक मानक एक्सेल प्रकार्य द्वारा लागू गरिएको छ निकासी (अफसेट), जसमा यस अवस्थामा तीनवटा तर्कहरू छन् - मूल दायरा, पङ्क्ति शिफ्ट (1) र स्तम्भ सिफ्ट (0)।
ठिक छ, हामी डाइरेक्टरी (n = "") को अन्त्यमा पुग्ने बित्तिकै, हामीले पुनरावृत्ति समाप्त गर्नुपर्छ - हामीले आफैलाई कल गर्न छोड्छौं र स्रोत पाठ भ्यारीएबलमा सबै प्रतिस्थापन पछि के जम्मा भएको देखाउँछौं।
यति नै। कुनै कठिन म्याक्रो वा पावर क्वेरी प्रश्नहरू छैनन् - सम्पूर्ण कार्य एक प्रकार्य द्वारा हल गरिएको छ।
- एक्सेलको नयाँ डायनामिक एरे प्रकार्यहरू कसरी प्रयोग गर्ने: FILTER, SORT, UNIC
- SUBSTITUTE प्रकार्यको साथ पाठ प्रतिस्थापन र सफा गर्दै
- VBA मा म्याक्रो र प्रयोगकर्ता-परिभाषित प्रकार्यहरू (UDFs) सिर्जना गर्दै