VBA का उपयोग किए बिना कस्टम उपयोगकर्ता फ़ंक्शन


10

क्या VBA का उपयोग किए बिना Excel में कस्टम उपयोगकर्ता फ़ंक्शन बनाना संभव है?
मेरी समस्या यह है कि मेरे पास मानक एक्सेल फ़ंक्शन की एक लंबी स्ट्रिंग है जो एक बहुत लंबे फ़ंक्शन को बनाने के लिए एक साथ घूमती है। इस फ़ंक्शन का उपयोग मेरी कार्यपुस्तिका में 25 विभिन्न कार्यपत्रकों में किया जाता है। अगर मुझे इसमें बदलाव करने की आवश्यकता है तो मैं केवल एक ही स्थान पर ऐसा करना चाहूंगा और सभी शीटों में स्वचालित रूप से प्रचारित किए गए परिवर्तन होंगे।

उदाहरण के लिए, एक सरल और तुच्छ मामला SUM () के परिणाम में एक को जोड़ना होगा, अर्थात। SUM (mySeries) +1, और इसे एक नया फ़ंक्शन MYSUM () कहते हैं।

संभावित त्रुटियों के कारण और जोड़े गए जटिलता के कारण लंबे फॉर्मूले को VBA में अनुवाद करने में मुझे संकोच है।


अच्छा सवाल है, हालांकि मुझे संदेह है कि आपको जवाब मिल जाएगा। मुझे लगता है कि VBA में आवश्यक कार्य के निर्माण में मदद के लिए पूछना एक बेहतर पाठ्यक्रम होगा।
एलियाडटेक

जवाबों:


11

यदि आप Excel नामांकित फ़ार्मुलों का उपयोग करते हैं, तो यह संभव है ।

उदाहरण के लिए, मान लें कि आपको अपनी कार्यपुस्तिका के अलग-अलग स्थानों में दो लगातार स्तंभों ( A5: Ax - B5: Bx ) के अंतर की गणना करने की आवश्यकता है ( x प्रत्येक स्तंभ की अंतिम पंक्ति है):

तो आप A11 में एक नाम परिभाषित करते हैं जिसे अंतर (किसी भी नाम का उपयोग किया जा सकता है) के रूप में = Sum (A $ 5: A10) -Sum (B $ 5: B10) , यह मानते हुए कि डेटा पंक्ति 5 में पिछली पंक्ति तक शुरू होता है । यह कोई भी सेल हो सकता है, न केवल ए 11 , बल्कि परिभाषा उसी तरह बदलती है।

दुर्भाग्य से, एक्सेल 2010 में पूर्ण उपसर्गों ( $ ) और वर्कशीट उपसर्गों को सम्मिलित किया गया है, इसलिए आपको उपसर्गों को मिटाने की आवश्यकता है, लेकिन विस्मयादिबोधक चिह्न और अधिकांश $ वर्णों को मिटा दें ।

जब आप सूत्रों को स्थानांतरित करते हैं, तो अधिकांश संदर्भ सापेक्ष होते हैं। तो यह हमेशा वर्तमान कॉलम और निम्न के बीच के अंतर की गणना करता है, पंक्ति 5 से शुरू होकर कुल लाइन से पहले की पंक्ति तक।

इसलिए यदि आपके पास C5 और D100 के बीच का डेटा है, तो आप C101 में सिर्फ = डिफाइन करें और यह Sum (C5: C100) - सम (D5: D100) की गणना करता है ।

जाहिर है, आप नामांकित सूत्रों में स्थानीय या वैश्विक नामों का उपयोग कर सकते हैं, जैसे आपने अपने प्रश्न में उल्लेख किया है।

आप नामांकित सूत्र में अधिक विवरण पढ़ सकते हैं ।


2

मुझे पता है कि आपने कोई VBA नहीं कहा है, लेकिन निम्न प्रकार से करने के लिए आपको वास्तव में अपने फॉर्मूले को फिर से लिखने की आवश्यकता नहीं है, VBA के बारे में अधिक जानें, और न ही VBA में अपने सूत्रों को बनाए रखें। आप इसे एक बार लिख सकते हैं और इसके बारे में भूल सकते हैं।

सेल से सूत्र को स्ट्रिंग के रूप में निकालने के लिए उपयोगकर्ता-परिभाषित फ़ंक्शन बनाएँ:

Function GetFormula(Target As Range) As String
    GetFormula = Target.Formula
End Function

सूत्र की तरह स्ट्रिंग का मूल्यांकन करने के लिए एक और बनाएं:

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

यदि आपके पास शीट 1! 1 में आपका मास्टर फॉर्मूला है, तो आप इसे हर उस सेल में डाल देंगे जिसका उपयोग करने की आवश्यकता है:

=eval(getformula(sheet1!a1))

Excel नामांकित फ़ार्मुलों पर इस पद्धति का उपयोग करने का क्या लाभ है?
डकोटा

यह वास्तव में एक फ़ंक्शन को परिभाषित करता है, जबकि "नामांकित सूत्र" केवल एक परिणाम के संदर्भ को परिभाषित करता है। उदाहरण के लिए, यदि मैं एक ऐसा फंक्शन बनाना चाहता हूं जो यह जांच करे कि क्या कोई सेल खाली है या सिर्फ व्हाट्सएप है, तो मैं इसे कॉल करना चाहूंगा =IF(BlankOrWhitespace(A5),true,false)। नामित फ़ार्मुलों के लिए यह संभव नहीं है क्योंकि आप एक सेल के सूत्र सामग्री को संदर्भित कर रहे हैं और एक नए फ़ंक्शन को परिभाषित नहीं कर रहे हैं
mtalexan

1
एक और समस्या है जो VBA के उपयोग से उत्पन्न होती है। सुरक्षा। आपकी कार्यपुस्तिका असुरक्षित हो जाएगी क्योंकि VBA का दुरुपयोग हो सकता है। वायरस होने पर आपकी कार्यपुस्तिका को गलत माना जाएगा।
आकांक्षा

@Akkkkhe का कारण है कि मैं VBA से बचता हूं। यह बहुत दुख की बात है।
पेड्रो77

0

यह धागा थोड़ा पुराना है, लेकिन मैंने इसे कुछ और की तलाश में ठोकर खाई और सोचा कि मैं इस सटीक चीज़ को पूरा करने के लिए कुछ समय पहले एक वर्कबुक साझा करूंगा: https://www.dropbox.com/s/gf5qrjj5q81tpke Title_Case_Named_Range_Function.xlsx? डीएल = 1

संक्षेप में, आप VBA (सॉर्ट) के बिना एक UDF बना सकते हैं, एक 0-लंबाई स्ट्रिंग आउटपुट के साथ Excel के अंतर्निहित फ़ार्मुलों को हाईजैक करके और नामांकित रेंज स्ट्रिंग हेरफेर के माध्यम से सम्मिलित डेटा की व्याख्या करने के लिए एक विधि के साथ आ रहा है, लेकिन यह है ऐसा करने के लिए अक्षम से परे। आपको चेतावनी दी गई थी! :)

तरीका:

  1. उदाहरण में, मैंने दोनों = आरईपीटी ([उद्धरण के बीच सेल संदर्भ या कुछ पाठ]], 0) और = पाठ ([यहां उद्धरणों के बीच [सेल संदर्भ या कुछ पाठ का उपयोग किया है], ";;;") का उपयोग शुरुआती बिंदु के रूप में किया है। एक अंतर्निहित सूत्र में उपयोगकर्ता इनपुट के कुछ प्रकार को सक्षम करने में सक्षम है जो सेल में ही कोई दृश्य पाठ परिणाम उत्पन्न नहीं करेगा।

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

  3. अपने आप पर, = TCase एक त्रुटि पैदा करता है क्योंकि इसकी व्याख्या करने के लिए कोई सेल / स्ट्रिंग संदर्भ नहीं है (उदाहरण के पत्रक में, त्रुटि संदेश उस प्रारूप का सिर्फ एक अनुस्मारक है जिसका पालन करने की आवश्यकता है)। लेकिन, अपेक्षित 0-लंबाई वाले स्ट्रिंग एक्सेल फॉर्मूले के साथ TCase को संयोजित करने से यह एक स्ट्रिंग के रूप में सूत्र से इनपुट को पढ़ने और उस पर अपने तर्क को लागू करने की अनुमति देता है। अंत में, सूत्र / आउटपुट नीचे की तरह दिखाई देगा। ध्यान दें कि मैंने पाठ स्ट्रिंग को सीधे नीचे दिए गए सूत्र में सम्मिलित किया है, लेकिन आप उदाहरण पत्रक में देखेंगे कि यह एकल कक्ष संदर्भ की व्याख्या भी कर सकता है।

    FORMULA:
    =TCase&REPT("i want to convert this mIxEd sTRing into A TITLE cAsE string!!!",0)

    उत्पादन:

    I Want to Convert This Mixed String Into a Title Case String!!!

अंत में, मैं एक रुग्ण जिज्ञासा के अलावा किसी अन्य चीज के लिए इस पद्धति का पालन करने की सिफारिश नहीं करूंगा कि एक्सेल को किस सीमा तक धकेला जा सकता है। VBA एक बहुत सरल और सुरुचिपूर्ण UDF समाधान है, लेकिन मुझे कम से कम चुनौती लेने में मज़ा आया।

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

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