VBA . में लूप्स

ऐसी स्थितियाँ होती हैं जब VBA प्रोग्राम को एक ही सेट की क्रियाओं को लगातार कई बार करने की आवश्यकता होती है (अर्थात, कोड के एक ही ब्लॉक को कई बार दोहराएं)। यह वीबीए लूप का उपयोग करके किया जा सकता है।

वीबीए लूप में शामिल हैं:

इसके बाद, हम इनमें से प्रत्येक चक्र पर करीब से नज़र डालेंगे।

विजुअल बेसिक में लूप ऑपरेटर के लिए

लूप ऑपरेटर की संरचना RSI विजुअल बेसिक में दो रूपों में से एक में व्यवस्थित किया जा सकता है: लूप के रूप में अगले के लिए या एक लूप के रूप में प्रत्येक के लिए.

साइकिल "के लिए ... अगला"

चक्र अगले के लिए एक चर का उपयोग करता है जो क्रमिक रूप से किसी दी गई सीमा से मान लेता है। चर के मूल्य के प्रत्येक परिवर्तन के साथ, चक्र के शरीर में संलग्न क्रियाएं की जाती हैं। इसे एक साधारण उदाहरण से समझना आसान है:

i = 1 से 10 के लिए कुल = कुल + iArray(i) अगला i

इस सरल पाश में अगले के लिए चर का उपयोग किया जाता है i, जो क्रमिक रूप से मान 1, 2, 3, … 10 लेता है, और इनमें से प्रत्येक मान के लिए, लूप के अंदर VBA कोड निष्पादित किया जाता है। इस प्रकार, यह लूप सरणी के तत्वों का योग करता है। iArray चर में कुल.

उपरोक्त उदाहरण में, लूप इंक्रीमेंट निर्दिष्ट नहीं है, इसलिए वेरिएबल को बढ़ाने के लिए i 1 से 10 तक, डिफ़ॉल्ट एक वृद्धि है 1... हालांकि, कुछ मामलों में लूप के लिए विभिन्न वेतन वृद्धि मूल्यों का उपयोग करना आवश्यक है। यह कीवर्ड का उपयोग करके किया जा सकता है कदमजैसा कि निम्नलिखित सरल उदाहरण में दिखाया गया है।

d = 0 से 10 के लिए चरण 0.1 dTotal = dTotal + d अगला d

चूंकि उपरोक्त उदाहरण में, वेतन वृद्धि चरण बराबर सेट किया गया है 0.1, फिर चर कुल चक्र के प्रत्येक पुनरावृत्ति के लिए 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 मान लेता है।

वीबीए में लूप चरण निर्धारित करने के लिए, आप नकारात्मक मान का उपयोग कर सकते हैं, उदाहरण के लिए, इस तरह:

i = 10 से 1 चरण -1 के लिए iArray(i) = i अगला i

यहाँ वृद्धि है -1, तो चर i चक्र के प्रत्येक पुनरावृत्ति के साथ मान 10, 9, 8, … 1 लेता है।

लूप "प्रत्येक के लिए"

चक्र प्रत्येक के लिए एक चक्र के समान अगले के लिए, लेकिन काउंटर वेरिएबल के लिए मानों के अनुक्रम पर पुनरावृति करने के बजाय, लूप प्रत्येक के लिए वस्तुओं के निर्दिष्ट समूह में प्रत्येक वस्तु के लिए क्रियाओं का एक सेट करता है। निम्नलिखित उदाहरण में, लूप का उपयोग करना प्रत्येक के लिए वर्तमान एक्सेल कार्यपुस्तिका में सभी शीटों की गणना करता है:

वर्कशीट में प्रत्येक wSheet के लिए वर्कशीट के रूप में मंद wSheet MsgBox "Найден лист:" और wSheet.Name अगला wSheet

लूप इंटरप्ट स्टेटमेंट "बाहर निकलें"

ऑपरेटर के लिए बाहर निकलें चक्र को बाधित करने के लिए प्रयोग किया जाता है। जैसे ही यह कथन कोड में सामने आता है, प्रोग्राम लूप के निष्पादन को समाप्त कर देता है और इस लूप के तुरंत बाद कोड में दिए गए कथनों के निष्पादन के लिए आगे बढ़ता है। इसका उपयोग, उदाहरण के लिए, किसी सरणी में किसी विशिष्ट मान को खोजने के लिए किया जा सकता है। ऐसा करने के लिए, लूप का उपयोग करके, सरणी के प्रत्येक तत्व को स्कैन किया जाता है। जैसे ही आवश्यक तत्व मिल जाता है, बाकी के माध्यम से देखने की कोई जरूरत नहीं है - चक्र बाधित होता है।

ऑपरेटर आवेदन के लिए बाहर निकलें निम्नलिखित उदाहरण में प्रदर्शित किया गया। यहां लूप 100 से अधिक सरणी प्रविष्टियों को पुनरावृत्त करता है और प्रत्येक की तुलना चर के मान से करता है डीवैल... यदि कोई मिलान पाया जाता है, तो लूप समाप्त हो जाता है:

i = 1 से 100 के लिए यदि dValues(i) = dVal तो IndexVal = i अंत के लिए बाहर निकलें यदि अगला i

विजुअल बेसिक में डू व्हाइल लूप

चक्र जबकि ऐसा जब तक निर्दिष्ट शर्त पूरी हो जाती है, तब तक कोड का एक ब्लॉक निष्पादित करता है। निम्नलिखित एक प्रक्रिया का एक उदाहरण है उप, जिसमें लूप का उपयोग करना जबकि ऐसा फाइबोनैचि संख्याएं 1000 से अधिक नहीं क्रमिक रूप से प्रदर्शित की जाती हैं:

अनुक्रम में तत्व की स्थिति को इंगित करने के लिए 'उप प्रक्रिया आउटपुट फाइबोनैचि संख्या 1000 से अधिक उप फाइबोनैचि() Dim i as Integer 'काउंटर क्रम में Dim iFib As Integer' अनुक्रम के वर्तमान मान को संग्रहीत करता है Dim iFib_Next As Integer 'अगला मान संग्रहीत करता है अनुक्रम का Dim iStep As Integer 'अगली वृद्धि के आकार को संग्रहीत करता है' प्रारंभिक चर i और iFib_Next i = 1 iFib_Next = 0 'डू जबकि लूप तब तक निष्पादित होगा जब तक कि' वर्तमान फाइबोनैचि संख्या 1000 से अधिक न हो जाए, जबकि iFib_Next <1000 यदि i = 1 फिर 'पहले तत्व के लिए विशेष मामला iStep = 1 iFib = 0 अन्य 'ओवरराइटिंग से पहले अगले वेतन वृद्धि के आकार को बचाएं' अनुक्रम का वर्तमान मान iStep = iFib iFib = iFib_Next End If 'के कॉलम A में वर्तमान फाइबोनैचि संख्या प्रिंट करें इंडेक्स i सेल (i, 1) के साथ पंक्ति में सक्रिय वर्कशीट '। वैल्यू = iFib 'अगली फाइबोनैचि संख्या की गणना करें और तत्व स्थिति सूचकांक को 1 iFib_Next = iFib + iStep i = i + 1 लूप एंड सब से बढ़ाएं

दिए गए उदाहरण में, स्थिति iFib_Next <1000 लूप की शुरुआत में चेक किया गया। इसलिए, यदि पहला मान iFib_अगला यदि 1000 से अधिक होते, तो लूप कभी निष्पादित नहीं होता।

लूप को लागू करने का दूसरा तरीका जबकि ऐसा - कंडीशन को शुरुआत में नहीं, बल्कि लूप के अंत में रखें। इस मामले में, लूप को कम से कम एक बार निष्पादित किया जाएगा, भले ही शर्त पूरी हो या नहीं।

योजनाबद्ध रूप से, ऐसा चक्र जबकि ऐसा अंत में जाँच की जाने वाली शर्त इस तरह दिखेगी:

करो ... लूप जबकि iFib_Next <1000

икл «डू टिल» в विजुअल बेसिक

चक्र तब तक करो चक्र के समान जबकि ऐसा: लूप के शरीर में कोड के ब्लॉक को निर्दिष्ट शर्त पूरी होने तक बार-बार निष्पादित किया जाता है (सशर्त अभिव्यक्ति का परिणाम है यह सच है) अगली प्रक्रिया में उप एक चक्र का उपयोग करना तब तक करो एक कॉलम में सभी सेल से मान प्राप्त करें A कार्यपत्रक जब तक कॉलम एक खाली सेल का सामना नहीं करता है:

iRow = 1 IsEmpty (सेल (iRow, 1)) तक करें 'वर्तमान सेल का मान सरणी में संग्रहीत है dCellValues ​​​​dCellValues ​​(iRow) = सेल (iRow, 1)। मान iRow = iRow + 1 लूप

उपरोक्त उदाहरण में, स्थिति खाली है (सेल (iRow, 1)) संरचना की शुरुआत में स्थित तब तक करो, इसलिए लूप को कम से कम एक बार निष्पादित किया जाएगा यदि लिया गया पहला सेल खाली नहीं है।

हालाँकि, जैसा कि लूप उदाहरणों में दिखाया गया है जबकि ऐसा, कुछ स्थितियों में यह आवश्यक है कि सशर्त अभिव्यक्ति के प्रारंभिक परिणाम की परवाह किए बिना लूप को कम से कम एक बार निष्पादित किया जाए। इस मामले में, सशर्त अभिव्यक्ति को लूप के अंत में रखा जाना चाहिए, जैसे:

Do ... लूप तक IsEmpty(Cells(iRow, 1))

एक जवाब लिखें