वीबीए फंक्शन - कॉल, रिटर्न वैल्यू, और पैरामीटर्स

यह ट्यूटोरियल आपको VBA में पैरामीटर के साथ और बिना फंक्शन बनाना और उपयोग करना सिखाएगा

VBA में आपके उपयोग के लिए बड़ी मात्रा में अंतर्निहित कार्य हैं, लेकिन आप अपना खुद का भी लिखने में सक्षम हैं। जब आप वीबीए में कोड लिखते हैं, तो आप इसे उप प्रक्रिया या फ़ंक्शन प्रक्रिया में लिख सकते हैं। एक फ़ंक्शन प्रक्रिया आपके कोड के लिए एक मान वापस करने में सक्षम है। यह बेहद उपयोगी है यदि आप चाहते हैं कि वीबीए परिणाम वापस करने के लिए कार्य करे। एक्सेल के बिल्ट-इन एक्सेल फंक्शन्स की तरह ही VBA फंक्शन्स को एक्सेल के अंदर से भी कॉल किया जा सकता है।

तर्क के बिना एक समारोह बनाना

फ़ंक्शन बनाने के लिए आपको फ़ंक्शन को एक नाम देकर फ़ंक्शन को परिभाषित करने की आवश्यकता होती है। फ़ंक्शन को तब डेटा प्रकार के रूप में परिभाषित किया जा सकता है जो उस डेटा के प्रकार को दर्शाता है जिसे आप फ़ंक्शन को वापस करना चाहते हैं।

आप एक ऐसा फ़ंक्शन बनाना चाह सकते हैं जो हर बार एक स्थिर मान लौटाता है - एक स्थिर जैसा।

123 फ़ंक्शन GetValue () पूर्णांक के रूप मेंगेटवैल्यू = 50अंत समारोह

यदि आप फ़ंक्शन को चलाना चाहते हैं, तो फ़ंक्शन हमेशा 50 का मान लौटाएगा।

आप वीबीए में ऑब्जेक्ट्स को संदर्भित करने वाले फ़ंक्शन भी बना सकते हैं लेकिन फ़ंक्शन से मान वापस करने के लिए आपको कीवर्ड सेट करें का उपयोग करने की आवश्यकता है।

123 फंक्शन GetRange () रेंज के रूप मेंगेटरेंज = रेंज सेट करें ("ए 1: जी 4")अंत समारोह

यदि आप अपने VBA कोड में उपरोक्त फ़ंक्शन का उपयोग करते हैं, तो फ़ंक्शन हमेशा A1 से G4 तक की कोशिकाओं की श्रेणी को वापस कर देगा, जिस भी शीट में आप काम कर रहे हैं।

उप प्रक्रिया से किसी फ़ंक्शन को कॉल करना

एक बार जब आप कोई फ़ंक्शन बना लेते हैं, तो आप फ़ंक्शन को कॉल करने के लिए उप प्रक्रिया का उपयोग करके इसे अपने कोड में कहीं से भी कॉल कर सकते हैं।

50 का मान हमेशा लौटाया जाएगा।

आप उप प्रक्रिया से GetRange फ़ंक्शन को भी कॉल कर सकते हैं।

उपरोक्त उदाहरण में, GetRange फंक्शन को सब प्रोसीजर द्वारा रेंज ऑब्जेक्ट में सेल्स को बोल्ड करने के लिए कहा जाता है।

कार्य बनाना

एकल तर्क

आप अपने फ़ंक्शन के लिए एक पैरामीटर या पैरामीटर भी निर्दिष्ट कर सकते हैं। इन मापदंडों को तर्क के रूप में संदर्भित किया जा सकता है।

123 फ़ंक्शन ConvertKilosToPounds (dblKilo डबल के रूप में) डबल के रूप मेंकन्वर्टकिलोटॉपाउंड्स = डीबीएलकिलो*2.2अंत समारोह

फिर हम उपरोक्त फ़ंक्शन को एक उप प्रक्रिया से कॉल कर सकते हैं ताकि यह पता लगाया जा सके कि एक विशिष्ट मात्रा में किलो कितने पाउंड हैं।

यदि आवश्यक हो तो आपके वीबीए कोड के भीतर कई प्रक्रियाओं से एक फ़ंक्शन को कॉल किया जा सकता है। यह इस मायने में बहुत उपयोगी है कि यह आपको एक ही कोड को बार-बार लिखने से रोकता है। यह आपको लंबी प्रक्रियाओं को छोटे प्रबंधनीय कार्यों में विभाजित करने में भी सक्षम बनाता है।

उपरोक्त उदाहरण में, हमारे पास 2 प्रक्रियाएं हैं - उनमें से प्रत्येक फ़ंक्शन का उपयोग करके उन्हें दिए गए किलो के पाउंड मूल्य की गणना करने के लिए उपयोग कर रहे हैं। डीबीएलकिलो समारोह का तर्क।

एकाधिक तर्क

आप कई तर्कों के साथ एक फ़ंक्शन बना सकते हैं और उप प्रक्रिया के माध्यम से फ़ंक्शन को मान पास कर सकते हैं।

123 फ़ंक्शन कैलकुलेटडेडिफ़ (दिनांक १ को दिनांक के रूप में, दिनांक २ को दिनांक के रूप में) डबल के रूप मेंकैलकुलेटडेडिफ = डेट2-डेट1अंत समारोह

फिर हम 2 तिथियों के बीच दिनों की मात्रा की गणना करने के लिए फ़ंक्शन को कॉल कर सकते हैं।

वैकल्पिक तर्क

आप किसी फ़ंक्शन के लिए वैकल्पिक तर्क भी पास कर सकते हैं। दूसरे शब्दों में, कभी-कभी आपको तर्क की आवश्यकता हो सकती है, और कभी-कभी आपको नहीं - इस बात पर निर्भर करता है कि आप किस कोड के साथ फ़ंक्शन का उपयोग कर रहे हैं।

123456 फ़ंक्शन कैलकुलेटडेडिफ़ (दिनांक १ को दिनांक के रूप में, वैकल्पिक दिनांक २ को दिनांक के रूप में) डबल के रूप में'दूसरी तारीख के लिए जाँच करें और अगर वहाँ नहीं है, तो तारीख 2 को आज की तारीख के बराबर करें।यदि दिनांक २ = ० तो दिनांक २ = दिनांक'अंतर की गणना करें'कैलकुलेटडेडिफ = डेट2-डेट1अंत समारोह

डिफ़ॉल्ट तर्क मान

जब आप फ़ंक्शन बना रहे हों तो आप वैकल्पिक तर्कों का डिफ़ॉल्ट मान भी सेट कर सकते हैं ताकि यदि उपयोगकर्ता तर्क को छोड़ देता है, तो आपके द्वारा डिफ़ॉल्ट के रूप में रखा गया मान इसके बजाय उपयोग किया जाएगा।

1234 फ़ंक्शन कैलकुलेटडेडिफ़ (दिनांक १ को दिनांक के रूप में, वैकल्पिक दिनांक २ को दिनांक के रूप में = "०६/०२/२०२०") को डबल . के रूप में'अंतर की गणना करें'कैलकुलेटडेडिफ = डेट2-डेट1अंत समारोह

ByVal और ByRef

जब आप किसी फ़ंक्शन में मान पास करते हैं, तो आप इसका उपयोग कर सकते हैं ByVal या ByRef खोजशब्द। यदि आप इनमें से किसी एक को छोड़ देते हैं, तो ByRef डिफ़ॉल्ट के रूप में प्रयोग किया जाता है।

ByVal इसका मतलब है कि आप वेरिएबल की एक कॉपी को फंक्शन में पास कर रहे हैं, जबकि ByRef इसका मतलब है कि आप चर के मूल मान की बात कर रहे हैं। जब आप चर की एक प्रति पास करते हैं (ByVal), चर का मूल मान है नहीं बदल गया है, लेकिन जब आप चर का संदर्भ देते हैं, तो चर का मूल मान फ़ंक्शन द्वारा बदल दिया जाता है।

1234 फ़ंक्शन GetValue (ByRef intA Integer के रूप में) Integer . के रूप मेंइंटए = इंटए * 4गेटवैल्यू = इंटएअंत समारोह

उपरोक्त फ़ंक्शन में, ByRef को छोड़ा जा सकता है और फ़ंक्शन उसी तरह काम करेगा।

1234 फंक्शन GetValue(intA As Integer) Integerइंटए = इंटए * 4गेटवैल्यू = इंटएअंत समारोह

इस फ़ंक्शन को कॉल करने के लिए, हम एक उप-प्रक्रिया चला सकते हैं।

123456789 उप परीक्षण मान ()डिम इंटवैल अस इंटीजर'वैरिएबल को मान 10 के साथ पॉप्युलेट करें'इंटवैल = 10'गेटवैल्यू फ़ंक्शन चलाएं, और तत्काल विंडो में मान दिखाएंDebug.Print GetValue(intVal)'तत्काल विंडो में intVal वैरिएबल का मान दिखाएं'डिबग.प्रिंट इंटवैलअंत उप

ध्यान दें कि डिबग विंडो दोनों बार मान 40 दिखाती हैं। जब आप चर IntVal को फ़ंक्शन में पास करते हैं - 10 का मान फ़ंक्शन को दिया जाता है, और 4 से गुणा किया जाता है। ByRef कीवर्ड का उपयोग करना (या इसे पूरी तरह से छोड़ देना), IntVal चर के मान को संशोधित करेगा। यह तब दिखाया जाता है जब आप पहले तत्काल विंडो (40) में फ़ंक्शन का परिणाम दिखाते हैं, और फिर डीबग विंडो (भी 40) में IntVal वैरिएबल का मान दिखाते हैं।

यदि हम मूल चर के मान को बदलना नहीं चाहते हैं, तो हमें फ़ंक्शन में ByVal का उपयोग करना होगा।

1234 फंक्शन GetValue(ByVal intA As Integer) Integerइंटए = इंटए * 4गेटवैल्यू = इंटएअंत समारोह

अब अगर हम उप-प्रक्रिया से फ़ंक्शन को कॉल करते हैं, तो चर IntVal का मान 10 पर रहेगा।

समारोह से बाहर निकलें

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

12345678910111213 फ़ंक्शन FindNumber (स्ट्रिंग के रूप में strSearch) पूर्णांक के रूप मेंडिम आई अस इंटीजर'स्ट्रिंग में प्रत्येक अक्षर के माध्यम से लूप'i = 1 से लेन (strSearch) के लिए'यदि अक्षर संख्यात्मक है, तो मान को फ़ंक्शन पर वापस कर देंयदि IsNumeric(Mid(strSearch, i, 1)) तोFindNumber= Mid(strSearch, i, 1)'फिर फ़ंक्शन से बाहर निकलेंसमारोह से बाहर निकलेंअगर अंतअगलाफाइंडनंबर = 0अंत समारोह

उपरोक्त फ़ंक्शन उस स्ट्रिंग के माध्यम से लूप करेगा जो तब तक प्रदान किया जाता है जब तक कि उसे कोई संख्या न मिल जाए, और फिर उस नंबर को स्ट्रिंग से वापस कर दें। यह केवल स्ट्रिंग में पहला नंबर ढूंढेगा जैसा कि तब होगा बाहर जाएं कार्यक्रम।

उपरोक्त कार्य को उप-दिनचर्या द्वारा बुलाया जा सकता है जैसे कि नीचे वाला।

1234567 उप चेकफॉरनंबर ()डिम NUMIs पूर्णांक के रूप में'संख्या खोजने के लिए एक टेक्स्ट स्ट्रिंग पास करें'NumIs = FindNumber ("ऊपरी मंजिल, 8 ओक लेन, टेक्सास")'तत्काल विंडो में परिणाम दिखाएं'डिबग.प्रिंट numIsअंत उप

एक्सेल शीट के भीतर से फ़ंक्शन का उपयोग करना

उप प्रक्रिया का उपयोग करके अपने वीबीए कोड से फ़ंक्शन को कॉल करने के अलावा, आप फ़ंक्शन को अपनी एक्सेल शीट से भी कॉल कर सकते हैं। आपके द्वारा बनाए गए फ़ंक्शन डिफ़ॉल्ट रूप से फ़ंक्शन सूची के उपयोगकर्ता परिभाषित अनुभाग में आपकी फ़ंक्शन सूची में दिखाई देने चाहिए।

पर क्लिक करें एफएक्स इन्सर्ट फंक्शन डायलॉग बॉक्स दिखाने के लिए।

चुनते हैं उपयोगकर्ता परिभाषित श्रेणी सूची से

उस फ़ंक्शन का चयन करें जिसकी आपको उपलब्ध से आवश्यकता है उपयोगकर्ता परिभाषित कार्य (यूडीएफ)।

वैकल्पिक रूप से, जब आप एक्सेल में अपना फंक्शन लिखना शुरू करते हैं, तो फंक्शन फंक्शन्स की ड्रॉप डाउन लिस्ट में दिखना चाहिए।

यदि आप नहीं चाहते कि फ़ंक्शन एक्सेल शीट के अंदर उपलब्ध हो, तो आपको अपने वीबीए कोड में फ़ंक्शन बनाते समय फ़ंक्शन शब्द के सामने निजी शब्द रखना होगा।

123 निजी फ़ंक्शन कैलकुलेटडेडिफ़ (दिनांक १ को दिनांक के रूप में, दिनांक २ को दिनांक के रूप में) डबल के रूप मेंकैलकुलेटडेडिफ = डेट2-डेट1अंत समारोह

यह अब उपलब्ध एक्सेल फ़ंक्शंस को दिखाते हुए ड्रॉप डाउन सूची में नहीं दिखाई देगा।

दिलचस्प रूप से पर्याप्त है, हालांकि, आप अभी भी फ़ंक्शन का उपयोग कर सकते हैं - इसे खोजते समय यह सूची में दिखाई नहीं देगा!

यदि आपने दूसरा तर्क घोषित किया है ऐच्छिक, आप इसे एक्सेल शीट के साथ-साथ वीबीए कोड के भीतर भी छोड़ सकते हैं।

आप उस फ़ंक्शन का भी उपयोग कर सकते हैं जिसे आपने अपनी एक्सेल शीट में बिना तर्क के बनाया है।

आप साइट के विकास में मदद मिलेगी, अपने दोस्तों के साथ साझा करने पेज

wave wave wave wave wave