VBA मा लूपहरू

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

VBA लूपहरू समावेश छन्:

अर्को, हामी यी प्रत्येक चक्रलाई नजिकबाट हेर्नेछौं।

भिजुअल बेसिकमा लूप अपरेटरका लागि

लूप अपरेटरको संरचना यो भिजुअल बेसिकमा दुई मध्ये एउटामा व्यवस्थित गर्न सकिन्छ: लुपको रूपमा को लागी… अर्को वा लुपको रूपमा प्रत्येकको लागी.

साइकल "का लागि ... अर्को"

चक्र को लागी… अर्को दिइएको दायराबाट क्रमिक रूपमा मान लिने चल प्रयोग गर्दछ। चरको मानको प्रत्येक परिवर्तनको साथ, चक्रको शरीरमा संलग्न कार्यहरू प्रदर्शन गरिन्छ। यो सरल उदाहरणबाट बुझ्न सजिलो छ:

i = 1 देखि 10 को लागि कुल = कुल + iArray(i) अर्को i

यो सरल लूप मा को लागी… अर्को चर प्रयोग गरिन्छ i, जसले क्रमिक रूपमा मानहरू 1, 2, 3, … 10 लिन्छ, र यी प्रत्येक मानहरूको लागि, लूप भित्र VBA कोड कार्यान्वयन गरिन्छ। यसरी, यो लूपले array को तत्वहरूको योग गर्दछ। iArray चर मा कुल.

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

d = 0 देखि 10 चरण 0.1 dTotal = dTotal + d अर्को d को लागि

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

VBA मा लुप चरण निर्धारण गर्न, तपाइँ नकारात्मक मान प्रयोग गर्न सक्नुहुन्छ, उदाहरण को लागी, यो जस्तै:

i = 10 देखि 1 चरण -1 iArray(i) = i अर्को i को लागि

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

लूप "प्रत्येकको लागि"

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

कार्यपत्रमा प्रत्येक wSheet को लागि कार्यपत्रको रूपमा wSheet मंद गर्नुहोस् MsgBox "Найден лист: " & wSheet. Name Next wSheet

लूप अवरोध कथन "का लागि बाहिर निस्कनुहोस्"

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

अपरेटर आवेदन लागि बाहिर निस्कनुहोस् निम्न उदाहरणमा देखाइएको छ। यहाँ लूपले १०० भन्दा बढी एरे प्रविष्टिहरू दोहोर्याउँछ र प्रत्येकलाई चरको मानसँग तुलना गर्छ। dVal... यदि मिल्दो फेला पर्यो भने, लुप समाप्त हुन्छ:

i = 1 देखि 100 को लागि यदि dValues(i) = dVal त्यसपछि IndexVal = i अन्त्यको लागि बाहिर निस्कनुहोस् यदि अर्को i

भिजुअल बेसिकमा लूप गर्दा गर्नुहोस्

चक्र समयमा गर्नुहोस् निर्दिष्ट सर्त पूरा नभएसम्म कोडको ब्लक कार्यान्वयन गर्दछ। निम्न कार्यविधिको उदाहरण हो उप, जसमा लूप प्रयोग गर्दै समयमा गर्नुहोस् 1000 भन्दा बढी नभएका फिबोनाची संख्याहरू क्रमिक रूपमा प्रदर्शित हुन्छन्:

'उपप्रक्रियाले 1000 भन्दा बढी नहुने फिबोनाची संख्याहरू आउटपुट गर्दछ Sub Fibonacci() 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 'Do while लुपले 'हालको फिबोनाची नम्बरको मान १००० भन्दा ठुलो नभएसम्म चलाउनेछ जबकि iFib_Next = 1000 यदि iFib_Next = 1000। 1 त्यसपछि 'पहिलो तत्वको लागि विशेष केस iStep = 1 iFib = 0 Else' ओभरराइट गर्नु अघि अर्को वृद्धिको साइज बचत गर्नुहोस् 'अनुक्रमको हालको मान iStep = iFib iFib = iFib_Next End If ' को स्तम्भ A मा हालको फिबोनाची नम्बर प्रिन्ट गर्नुहोस्। अनुक्रमणिका i कक्षहरू(i , 1) सँग पङ्क्तिमा सक्रिय कार्यपत्र '। Value = iFib ' अर्को फिबोनाची नम्बर गणना गर्नुहोस् र तत्व स्थिति अनुक्रमणिकालाई 1 iFib_Next = iFib + iStep i = i + 1 लुप एन्ड सबले बढाउनुहोस्।

दिइएको उदाहरणमा, अवस्था iFib_Next < 1000 लुपको सुरुमा जाँच गरियो। त्यसैले, यदि पहिलो मान iFib_Next यदि त्यहाँ 1000 भन्दा बढी थियो भने, लुप कहिल्यै कार्यान्वयन हुने थिएन।

लूप लागू गर्ने अर्को तरिका समयमा गर्नुहोस् - शर्त सुरुमा होइन, तर लूपको अन्त्यमा राख्नुहोस्। यस अवस्थामा, लूप कम्तिमा एक पटक निष्पादित हुनेछ, शर्त पूरा भए तापनि।

योजनाबद्ध रूपमा, यस्तो चक्र समयमा गर्नुहोस् अन्त्यमा जाँच गरिनु पर्ने अवस्थाको साथ यस्तो देखिन्छ:

iFib_Next < 1000 हुँदा लुप गर्नुहोस्

भिजुअल बेसिकमा "जबसम्म गर्नुहोस्"

चक्र सम्म गर्नुहोस् चक्रसँग धेरै समान समयमा गर्नुहोस्: निर्दिष्ट सर्त पूरा नभएसम्म लुपको मुख्य भागमा कोडको ब्लक बारम्बार कार्यान्वयन गरिन्छ (सशर्त अभिव्यक्तिको परिणाम हो साँचो)। अर्को प्रक्रियामा उप एक चक्र प्रयोग गर्दै सम्म गर्नुहोस् स्तम्भमा सबै कक्षहरूबाट मानहरू प्राप्त गर्नुहोस् A स्तम्भले खाली सेल नभेटेसम्म कार्यपत्र:

iRow = 1 IsEmpty(Cells(iRow, 1)) सम्म गर्नुहोस् 'हालको सेलको मान dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) मा भण्डारण गरिएको छ। मान iRow = iRow + 1 लूप

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

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

गर्नुहोस्... खाली नभएसम्म लुप (सेलहरू(iRow, 1))

जवाफ छाड्नुस्