excel-vba
उपयोगकर्ता परिभाषित कार्य (UDFs)
खोज…
वाक्य - विन्यास
समारोह फ़ंक्शन
किसी फ़ंक्शन की मूल घोषणा। प्रत्येक फ़ंक्शन को एक नाम की आवश्यकता होती है, लेकिन इसके लिए कोई तर्क नहीं देना पड़ता है। इसमें 0 तर्क हो सकते हैं, या यह दिए गए तर्कों की संख्या ले सकता है। आप एक तर्क को वैकल्पिक भी घोषित कर सकते हैं (इसका मतलब यह है कि फ़ंक्शन को कॉल करते समय आप इसे आपूर्ति करते हैं तो कोई बात नहीं)। प्रत्येक तर्क के लिए चर प्रकार की आपूर्ति करना सबसे अच्छा अभ्यास है, और इसी तरह, जिस डेटा प्रकार के लिए फ़ंक्शन स्वयं लौटने वाला है उसे वापस करने के लिए।functionName =VariableOrValueBeingReturned
यदि आप अन्य प्रोग्रामिंग भाषाओं से आ रहे हैं, तो आपकोReturn
कीवर्ड का उपयोग किया जा सकता है। यह VBA में उपयोग नहीं किया जाता है - इसके बजाय, हम फ़ंक्शन नाम का उपयोग करते हैं। आप इसे एक चर की सामग्री या कुछ सीधे आपूर्ति किए गए मूल्य पर सेट कर सकते हैं। ध्यान दें कि यदि आपने फ़ंक्शन की वापसी के लिए एक डेटा प्रकार सेट किया है, तो इस समय आप जिस चर या डेटा की आपूर्ति कर रहे हैं, वह उस डेटा प्रकार का होना चाहिए।अंत समारोह
अनिवार्य।Function
कोडब्लॉक के अंत को दर्शाता है और इस प्रकार अंत में होना चाहिए। जब आप नया फ़ंक्शन बनाते हैं तो VBE आमतौर पर स्वचालित रूप से इसकी आपूर्ति करता है।
टिप्पणियों
एक उपयोगकर्ता परिभाषित फ़ंक्शन (उर्फ UDF) एक विशिष्ट कार्य को संदर्भित करता है जो उपयोगकर्ता द्वारा बनाया गया है। इसे एक वर्कशीट फ़ंक्शन (उदा: =SUM(...)
) के रूप में कहा जा सकता है या किसी उप-प्रक्रिया में किसी मान को चल रही प्रक्रिया में वापस करने के लिए उपयोग किया जाता है। यूडीएफ एक मान लौटाता है, आम तौर पर एक या अधिक मापदंडों के रूप में इसमें दी गई जानकारी से।
इसके द्वारा बनाया जा सकता है:
- VBA का उपयोग करना।
- एक्सेल सी एपीआई का उपयोग करना - एक्सएलएल बनाकर जो एक्सेल को संकलित कार्यों का निर्यात करता है।
- COM इंटरफ़ेस का उपयोग करना।
यूडीएफ - हैलो वर्ल्ड
- एक्सेल खोलें
- खोलें दृश्य मूल संपादक (देखें खुलने का दृश्य मूल संपादक )
- सम्मिलित करें -> मॉड्यूल पर क्लिक करके एक नया मॉड्यूल जोड़ें:
- नए मॉड्यूल में निम्न कोड को कॉपी और पेस्ट करें:
Public Function Hello() As String
'Note: the output of the function is simply the function's name
Hello = "Hello, World !"
End Function
प्राप्त करना :
- अपनी कार्यपुस्तिका पर वापस जाएं और "हेलो वर्ल्ड" देखने के लिए एक सेल में "= हैलो ()" टाइप करें।
दंड के बिना पूर्ण स्तंभ संदर्भों की अनुमति दें
कार्यपत्रक पर कुछ यूडीएफ को लागू करना आसान है यदि पूर्ण स्तंभ संदर्भों को मापदंडों के रूप में पारित किया जा सकता है। हालांकि, कोडिंग की स्पष्ट प्रकृति के कारण, इन सीमाओं को शामिल करने वाला कोई भी लूप सैकड़ों हजारों कोशिकाओं को संसाधित कर सकता है जो पूरी तरह से खाली हैं। यह आपके VBA प्रोजेक्ट (और कार्यपुस्तिका) को एक जमे हुए गंदगी को कम करता है जबकि अनावश्यक गैर-मूल्यों को संसाधित किया जाता है।
वर्कशीट की कोशिकाओं के माध्यम से लूपिंग किसी कार्य को पूरा करने की सबसे धीमी विधियों में से एक है, लेकिन कभी-कभी यह अपरिहार्य है। वास्तव में जो आवश्यक है, उसके लिए किए गए कार्य को काटने से पूर्ण समझ में आता है।
समाधान कार्यपत्रक के लिए पूर्ण स्तंभ या पूर्ण पंक्ति संदर्भों को अलग करना है। इंट्रैक्ट विधि के साथ संपत्ति का उपयोग करें । निम्न नमूना शिथिल एक वर्कशीट के देशी SUMIF फ़ंक्शन को दोहराने तो criteria_range भी के बाद से sum_range में प्रत्येक मान criteria_range में एक मूल्य के साथ किया जाना चाहिए sum_range सूट करने के लिए बदल दिया जाएगा होगा।
एक वर्कशीट पर इस्तेमाल किया गया UDF के लिए Application.Caller वह सेल है जिसमें वह रहता है। सेल की .Parent प्रॉपर्टी वर्कशीट है। इसका उपयोग .UsedRange को परिभाषित करने के लिए किया जाएगा।
एक मॉड्यूल कोड शीट में:
Option Explicit
Function udfMySumIf(rngA As Range, rngB As Range, _
Optional crit As Variant = "yes")
Dim c As Long, ttl As Double
With Application.Caller.Parent
Set rngA = Intersect(rngA, .UsedRange)
Set rngB = rngB.Resize(rngA.Rows.Count, rngA.Columns.Count)
End With
For c = 1 To rngA.Cells.Count
If IsNumeric(rngA.Cells(c).Value2) Then
If LCase(rngB(c).Value2) = LCase(crit) Then
ttl = ttl + rngA.Cells(c).Value2
End If
End If
Next c
udfMySumIf = ttl
End Function
वाक्य - विन्यास:
=udfMySumIf(*sum_range*, *criteria_range*, [*criteria*])
हालांकि यह एक काफी सरल उदाहरण है, यह दो पूर्ण स्तंभ संदर्भों (प्रत्येक में 1,048,576 पंक्तियों) में गुजरने के लिए पर्याप्त रूप से प्रदर्शित करता है, लेकिन केवल 15 पंक्तियों के डेटा और मानदंडों को संसाधित करता है।
Microsoft ™ के सौजन्य से व्यक्तिगत तरीकों और संपत्तियों के आधिकारिक MSDN प्रलेखन को जोड़ा गया।
श्रेणी में अनन्य मानों की गणना करें
Function countUnique(r As range) As Long
'Application.Volatile False ' optional
Set r = Intersect(r, r.Worksheet.UsedRange) ' optional if you pass entire rows or columns to the function
Dim c As New Collection, v
On Error Resume Next ' to ignore the Run-time error 457: "This key is already associated with an element of this collection".
For Each v In r.Value ' remove .Value for ranges with more than one Areas
c.Add 0, v & ""
Next
c.Remove "" ' optional to exclude blank values from the count
countUnique = c.Count
End Function