ቀለበቶች በ VBA ውስጥ

የVBA ፕሮግራም በተከታታይ ብዙ ጊዜ አንድ አይነት የድርጊት ስብስቦችን ለማከናወን የሚያስፈልግበት ሁኔታዎች አሉ (ይህም አንድ አይነት ኮድ ብዙ ጊዜ ይድገሙት)። ይህ በ VBA loops በመጠቀም ሊከናወን ይችላል።

VBA loops የሚከተሉትን ያካትታሉ:

በመቀጠል፣ እያንዳንዳቸውን እነዚህን ዑደቶች በዝርዝር እንመለከታለን።

በ Visual Basic ለ Loop ኦፕሬተር

የ loop ኦፕሬተር መዋቅር in Visual Basic ከሁለት ቅጾች በአንዱ ሊደራጅ ይችላል፡ እንደ loop ለ… ቀጣይ ወይም እንደ loop ለእያንዳንድ.

ዑደት "ለ… ቀጣይ"

ዑደት ለ… ቀጣይ ከተጠቀሰው ክልል እሴቶችን በቅደም ተከተል የሚወስድ ተለዋዋጭ ይጠቀማል። በእያንዳንዱ የተለዋዋጭ እሴት ለውጥ, በዑደት አካል ውስጥ የተዘጉ ድርጊቶች ይከናወናሉ. ይህንን ከቀላል ምሳሌ ለመረዳት ቀላል ነው-

ለ i = 1 ወደ 10 ጠቅላላ = ጠቅላላ + iArray (i) ቀጣይ i

በዚህ ቀላል ዑደት ውስጥ ለ… ቀጣይ ተለዋዋጭ ጥቅም ላይ ይውላል iበቅደም ተከተል እሴቶቹን 1፣ 2፣ 3፣ … 10 ይወስዳል፣ እና ለእያንዳንዳቸው እነዚህ እሴቶች በ loop ውስጥ ያለው የVBA ኮድ ይፈጸማል። ስለዚህ, ይህ ዑደት የድርድር ክፍሎችን ያጠቃልላል. አይአርራይ በተለዋዋጭ ጠቅላላ.

ከላይ ባለው ምሳሌ, የሉፕ መጨመር አልተገለጸም, ስለዚህ ተለዋዋጭውን ለመጨመር i ከ 1 ወደ 10, ነባሪው ጭማሪ ነው 1ሆኖም፣ በአንዳንድ ሁኔታዎች ለሉፕ የተለያዩ ጭማሪ እሴቶችን መጠቀም አስፈላጊ ነው። ይህ ቁልፍ ቃሉን በመጠቀም ሊከናወን ይችላል። ደረጃበሚከተለው ቀላል ምሳሌ ላይ እንደሚታየው.

ለ d = 0 እስከ 10 ደረጃ 0.1 dTotal = dTotal + d ቀጣይ መ

ከላይ በተጠቀሰው ምሳሌ ውስጥ, የጭማሪው ደረጃ የተቀመጠው እኩል ነው 0.1, ከዚያም ተለዋዋጭ dTotal ለእያንዳንዱ የዑደቱ ድግግሞሽ 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 እሴቶችን ይወስዳል።

ሉፕ "ለእያንዳንዱ"

ዑደት ለእያንዳንድ ከዑደት ጋር ተመሳሳይ ለ… ቀጣይነገር ግን ለቆጣሪው ተለዋዋጭ የእሴቶቹን ቅደም ተከተል ከመድገም ይልቅ ሉፕ ለእያንዳንድ በተጠቀሰው የነገሮች ቡድን ውስጥ ለእያንዳንዱ ነገር የእርምጃዎች ስብስብ ያከናውናል. በሚከተለው ምሳሌ, loop በመጠቀም ለእያንዳንድ አሁን ባለው የ Excel የሥራ መጽሐፍ ውስጥ ያሉትን ሁሉንም ሉሆች ይዘረዝራል፡-

Dim wSheet እንደ የስራ ሉህ ለእያንዳንዱ wsheet በስራ ሉሆች MsgBox "Найден лист:" እና wSheet. ስም ቀጣይ wSheet

ሉፕ የማቋረጥ መግለጫ "ውጣ ለ"

ስልከኛ ውጣ ለ ዑደቱን ለማቋረጥ ጥቅም ላይ ይውላል. ይህ መግለጫ በኮዱ ውስጥ እንደተገኘ ፕሮግራሙ የ loopውን አፈፃፀም ያበቃል እና ከዚህ ዑደት በኋላ በኮዱ ውስጥ ያሉትን መግለጫዎች ወደ አፈፃፀም ይቀጥላል ። ይህ ለምሳሌ በአንድ ድርድር ውስጥ የተወሰነ እሴት ለመፈለግ ሊያገለግል ይችላል። ይህንን ለማድረግ, loopን በመጠቀም, የድርድር እያንዳንዱ አካል ይቃኛል. አስፈላጊው አካል እንደተገኘ, የቀረውን መመልከት አያስፈልግም - ዑደቱ ይቋረጣል.

ኦፕሬተር መተግበሪያ ውጣ ለ በሚከተለው ምሳሌ ታይቷል። እዚህ ሉፕ ከ100 በላይ የድርድር ግቤቶችን ይደግማል እና እያንዳንዱን ከተለዋዋጭ እሴት ጋር ያወዳድራል። ዲቫል… ተዛማጅ ከተገኘ፣ እንግዲያውስ ምልክቱ ይቋረጣል፡

ለ i = 1 ለ 100 dValues(i) = dVal ከሆነ IndexVal = i ለመጨረሻ ጊዜ ውጣ በሚቀጥለው ከሆነ i

በ Visual Basic ውስጥ ያለው Do While Loop

ዑደት ጊዜ ያድርጉ የተገለፀው ሁኔታ እስካልተሟላ ድረስ የኮድ ብሎክን ያስፈጽማል። የሚከተለው የሂደቱ ምሳሌ ነው። ንዑስ, ይህም ውስጥ loop በመጠቀም ጊዜ ያድርጉ ከ 1000 የማይበልጡ የ Fibonacci ቁጥሮች በቅደም ተከተል ይታያሉ

የንዑስ አሠራሩ ውጤት ከ 1000 ንዑስ ፊቦናቺ () Dim i As Integer 'መቁጠሪያ የንጥሉን አቀማመጥ በቅደም ተከተል ያሳያል Dim iFib As Integer 'የአሁኑን ተከታታይ እሴት ያከማቻል Dim iFib_ቀጣይ ኢንቲጀር ቀጣዩን እሴት ሲያከማች ተከታታይ Dim iStep As Integer 'የሚቀጥለውን ጭማሪ መጠን ያከማቻል' ተለዋዋጮች i እና iFib_Next i = 1 iFib_Next = 0 'Do ሳለ ሉፕ የሚፈፀመው የአሁኑ የ Fibonacci ቁጥር ከ 1000 በላይ እስኪሆን ድረስ iFib_ከሚቀጥለው iFib_ከሚቀጥለው <1000 1 ከዚያም 'የመጀመሪያው ኤለመንት ልዩ ጉዳይ iStep = 1 iFib = 0 ሌላ' ከመጻፍዎ በፊት የሚቀጥለውን ጭማሪ መጠን ይቆጥቡ 'የአሁኑን ቅደም ተከተል ዋጋ iStep = iFib iFib = iFib_ቀጣይ መጨረሻ' የአሁኑን የ Fibonacci ቁጥር በአምድ A ውስጥ ያትሙ. ገባሪ የስራ ሉህ በረድፍ ውስጥ ከመረጃ ጠቋሚ i Cells(i፣ 1) ጋር።እሴት = iFib የሚቀጥለውን ፊቦናቺ ቁጥር አስላ እና የኤለመንቱን ቦታ ኢንዴክስ በ1 iFib_ቀጣይ = iFib + iStep i = i + 1 Loop End Sub

በተሰጠው ምሳሌ, ሁኔታው iFib_ቀጣይ <1000 በ loop መጀመሪያ ላይ ተረጋግጧል. ስለዚህ, የመጀመሪያው ዋጋ ከሆነ iFib_ቀጣይ ከ1000 በላይ ቢሆን ኖሮ ዑደቱ በጭራሽ አይፈጸምም ነበር።

ሉፕን ለመተግበር ሌላኛው መንገድ ጊዜ ያድርጉ - ሁኔታውን መጀመሪያ ላይ ሳይሆን በሉፕ መጨረሻ ላይ ያስቀምጡት. በዚህ ሁኔታ, ሁኔታው ​​ቢሟላም, ምልክቱ ቢያንስ አንድ ጊዜ ይከናወናል.

በስርዓተ-ፆታ, እንደዚህ አይነት ዑደት ጊዜ ያድርጉ በመጨረሻው ላይ የሚመረመረው ሁኔታ ይህንን ይመስላል

አድርግ ... iFib_ቀጣይ <1000 እያለ ሉፕ ያድርጉ

ቪዥዋል ቤዚክ "እስከ ድረስ አድርግ"

ዑደት ድረስ ያድርጉት ከዑደት ጋር በጣም ተመሳሳይ ጊዜ ያድርጉየተገለጸው ሁኔታ እስኪሟላ ድረስ በ loop አካል ውስጥ ያለው የኮድ እገዳ በተደጋጋሚ ይከናወናል (የሁኔታው ሁኔታዊ መግለጫው ውጤት ነው) እርግጥ ነው). በሚቀጥለው አሰራር ንዑስ ዑደት በመጠቀም ድረስ ያድርጉት በአንድ አምድ ውስጥ ካሉ ሁሉም ህዋሶች እሴቶችን ሰርስሮ ማውጣት A ዓምዱ ባዶ ሕዋስ እስኪያገኝ ድረስ የስራ ሉህ፡-

iRow = 1 እስከ IsEmpty ድረስ ያድርጉ (ሴሎች (iRow, 1)) 'የአሁኑ ሕዋስ ዋጋ በድርድር ውስጥ ይከማቻል dCellValues ​​dCellValues(iRow) = ሕዋሶች(iRow, 1) .Value iRow = iRow + 1 Loop

ከላይ ባለው ምሳሌ, ሁኔታው ባዶ (ሴሎች (iRow, 1)) በመዋቅሩ መጀመሪያ ላይ የሚገኝ ድረስ ያድርጉት, ስለዚህ የመጀመሪያው የተወሰደው ሕዋስ ባዶ ካልሆነ ሉፕ ቢያንስ አንድ ጊዜ ይከናወናል.

ሆኖም ግን, በ loop ምሳሌዎች ላይ እንደሚታየው ጊዜ ያድርጉ, በአንዳንድ ሁኔታዎች ሁኔታዊ አገላለጽ የመነሻ ውጤት ምንም ይሁን ምን, ምልክቱ ቢያንስ አንድ ጊዜ እንዲፈፀም አስፈላጊ ነው. በዚህ ሁኔታ ፣ ሁኔታዊ አገላለጹ በ loop መጨረሻ ላይ መቀመጥ አለበት ፣

አድርግ ... እስከ ባዶ ድረስ (ሴሎች (iRow, 1))

መልስ ይስጡ