VBA मध्ये लूप

अशी परिस्थिती असते जेव्हा व्हीबीए प्रोग्रामला क्रियांचा एकच संच सलग अनेक वेळा करणे आवश्यक असते (म्हणजे, कोडच्या समान ब्लॉकची अनेक वेळा पुनरावृत्ती करा). हे VBA लूप वापरून केले जाऊ शकते.

VBA लूपमध्ये हे समाविष्ट आहे:

पुढे, आम्ही या प्रत्येक चक्रावर बारकाईने नजर टाकू.

व्हिज्युअल बेसिकमधील लूप ऑपरेटरसाठी

लूप ऑपरेटरची रचना अगोदर निर्देश केलेल्या बाबीसंबंधी बोलताना व्हिज्युअल बेसिकमध्ये दोनपैकी एका स्वरूपात आयोजित केले जाऊ शकते: लूप म्हणून साठी… पुढे किंवा लूप म्हणून प्रत्येकासाठी.

सायकल "साठी ... पुढील"

चक्र साठी… पुढे एक वेरियेबल वापरते जे क्रमाने दिलेल्या श्रेणीतून मूल्ये घेते. व्हेरिएबलच्या मूल्याच्या प्रत्येक बदलासह, चक्राच्या मुख्य भागामध्ये बंद केलेल्या क्रिया केल्या जातात. एका साध्या उदाहरणावरून हे समजणे सोपे आहे:

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, नंतर व्हेरिएबल 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 मूल्ये घेतात.

लूप “प्रत्येकासाठी”

चक्र प्रत्येकासाठी सायकल सारखे साठी… पुढे, परंतु काउंटर व्हेरिएबलसाठी मूल्यांच्या अनुक्रमावर पुनरावृत्ती करण्याऐवजी, लूप प्रत्येकासाठी ऑब्जेक्ट्सच्या निर्दिष्ट गटातील प्रत्येक ऑब्जेक्टसाठी क्रियांचा संच करते. खालील उदाहरणात, लूप वापरणे प्रत्येकासाठी वर्तमान एक्सेल वर्कबुकमधील सर्व शीट्सची गणना करते:

वर्कशीट MsgBox मधील प्रत्येक wsheet साठी वर्कशीट म्हणून wSheet मंद करा "Nайден лист: " & wSheet.Name Next wsheet

लूप इंटरप्ट स्टेटमेंट "साठी बाहेर पडा"

ऑपरेटर साठी बाहेर पडा चक्रात व्यत्यय आणण्यासाठी वापरले जाते. कोडमध्ये हे विधान समोर येताच, प्रोग्राम लूपची अंमलबजावणी समाप्त करतो आणि या लूपनंतर लगेचच कोडमध्ये असलेल्या विधानांच्या अंमलबजावणीकडे जातो. हे वापरले जाऊ शकते, उदाहरणार्थ, अॅरेमध्ये विशिष्ट मूल्य शोधण्यासाठी. हे करण्यासाठी, लूप वापरून, अॅरेचा प्रत्येक घटक स्कॅन केला जातो. आवश्यक घटक सापडल्याबरोबर, बाकीचे पाहण्याची गरज नाही - चक्रात व्यत्यय येतो.

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

दिलेल्या उदाहरणात, स्थिती iFib_Next < 1000 लूपच्या सुरुवातीला तपासले. म्हणून, जर प्रथम मूल्य iFib_Next जर 1000 पेक्षा जास्त असतील तर लूप कधीही कार्यान्वित होणार नाही.

लूप लागू करण्याचा दुसरा मार्ग करताना करा - कंडिशन सुरूवातीला नाही तर लूपच्या शेवटी ठेवा. या प्रकरणात, अट पूर्ण झाली की नाही याची पर्वा न करता, लूप किमान एकदा अंमलात आणला जाईल.

योजनाबद्धपणे, असे चक्र करताना करा शेवटी तपासल्या जाणार्‍या स्थितीसह असे दिसेल:

करा ... iFib_Next < 1000 असताना लूप

व्हिज्युअल बेसिक मध्ये «Do Toil»

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

iRow = 1 IsEmpty(Cells(iRow, 1)) पर्यंत करा 'वर्तमान सेलचे मूल्य dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) अॅरेमध्ये साठवले जाते. iRow = iRow + 1 लूप

वरील उदाहरणात, स्थिती रिक्त(पेशी(iRow, 1)) संरचनेच्या सुरूवातीस स्थित पर्यंत करा, म्हणून घेतलेला पहिला सेल रिकामा नसल्यास किमान एकदा लूप कार्यान्वित केला जाईल.

तथापि, लूप उदाहरणांमध्ये दर्शविल्याप्रमाणे करताना करा, काही परिस्थितींमध्ये सशर्त अभिव्यक्तीचा प्रारंभिक परिणाम विचारात न घेता, किमान एकदा लूप कार्यान्वित करणे आवश्यक आहे. या प्रकरणात, सशर्त अभिव्यक्ती लूपच्या शेवटी ठेवली पाहिजे, जसे की:

करा... रिक्त होईपर्यंत लूप(सेल्स(iRow, 1))

प्रत्युत्तर द्या