Lloji më i thjeshtë i ciklit në programimin Excel VBA është një cikli For-Next. Looping kontrollohet nga një variabël numërues, i cili fillon në një vlerë dhe ndalon në një vlerë tjetër. Deklaratat midis deklaratës For dhe deklaratës Next janë pohimet që përsëriten në ciklin.
Një shembull për-Next
Shembulli i mëposhtëm përdor një cikli For-Next për të përmbledhur 1000 numrat e parë pozitivë. Variabli Total fillon si zero. Pastaj ndodh looping. Ndryshorja Cnt është numëruesi i ciklit. Fillon si 1 dhe rritet me 1 çdo herë përmes ciklit. Cikli përfundon kur Cnt është 1000.
Ky shembull ka vetëm një deklaratë brenda ciklit. Kjo deklaratë shton vlerën e Cnt në ndryshoren Total. Kur cikli përfundon, një MsgBox shfaq shumën e numrave.
Nën AddNumbers()
Dim Total Si Dyfish
Dim Cnt Për aq kohë sa
Gjithsej = 0
Për Cnt = 1 deri në 1000
Total = Total + Cnt
Tjetër Cnt
MsgBox Total
Fundi Nën
Për shkak se numëruesi i ciklit është një variabël normal, ju mund të shkruani kod për të ndryshuar vlerën e tij brenda bllokut të kodit midis deklaratave For dhe Next. Megjithatë, kjo është një praktikë shumë e keqe .
Shembuj për-Next me një hap
Ju mund të përdorni një vlerë Hapi për të kapërcyer disa vlera numërues në një cikli For-Next. Këtu është shembulli i mëparshëm, i rishkruar për të mbledhur vetëm numrat tek midis 1 dhe 1000:
Nën AddOddNumbers()
Dim Total Si Dyfish
Dim Cnt Për aq kohë sa
Gjithsej = 0
Për Cnt = 1 në 1000 Hapi 2
Total = Total + Cnt
Tjetër Cnt
MsgBox Total
Fundi Nën
Këtë herë, Cnt fillon si 1 dhe më pas merr vlerat 3, 5, 7, e kështu me radhë. Vlera Step përcakton se si rritet numëruesi. Vini re se vlera e ciklit të sipërm (1000) nuk përdoret në fakt sepse vlera më e lartë e Cnt do të jetë 999.
Ja një shembull tjetër që përdor një vlerë Step prej 3. Kjo procedurë funksionon me fletën aktive dhe aplikon hije gri të lehta për çdo rresht të tretë, nga rreshti 1 në rreshtin 100.
Nën ShadeEveryThirdRow()
Dim i Sa Long
Për i = 1 në 100 Hapi 3
Rreshtat(i).E brendshme.Ngjyra = RGB(200, 200, 200)
Tjetra i
Fundi Nën
Shikoni rezultatin e ekzekutimit të kësaj makro.
Përdorimi i një cikli për të aplikuar hijezimin e sfondit në rreshta.
Një shembull For-Next me një deklaratë Exit For
Një cikli For-Next mund të përfshijë gjithashtu një ose më shumë deklarata Exit For brenda ciklit. Kur VBA ndeshet me këtë deklaratë, cikli përfundon menjëherë.
Shembulli i mëposhtëm demonstron deklaratën Exit For. Kjo rutinë është një procedurë funksioni, e destinuar për t'u përdorur në një formulë të fletës së punës. Funksioni pranon një argument (një variabël me emrin Str) dhe i kthen karakteret në të majtë të shifrës së parë numerike. Për shembull, nëse argumenti është "KBR98Z", funksioni kthen "KBR".
Funksioni TextPart(Str)
Dim i Sa Long
TextPart = ""
Për i = 1 në Len (Rr)
Nëse IsNumeric(Mid(Str, i, 1)) Atëherë
Dil Për
Përndryshe
TextPart = TextPart & Mid(Rr, i, 1)
Fundi Nëse
Tjetra i
Funksioni i Fundit
Cikli For-Next fillon me 1 dhe përfundon me numrin që përfaqëson numrin e karaktereve në varg. Kodi përdor funksionin Mid të VBA për të nxjerrë një karakter të vetëm brenda ciklit. Nëse gjendet një karakter numerik, ekzekutohet deklarata Exit For dhe cikli përfundon para kohe.
Nëse karakteri nuk është numerik, ai i shtohet vlerës së kthyer (e cila është e njëjtë me emrin e funksionit). E vetmja herë kur cikli do të ekzaminojë çdo karakter është nëse vargu i kaluar si argument nuk përmban karaktere numerike.
Një shembull i mbivendosur For-Next
Ju mund të keni çdo numër deklaratash në ciklin dhe të vendosni unazat For-Next brenda sytheve të tjera For-Next.
Shembulli i mëposhtëm përdor një cikli të mbivendosur For-Next për të futur numra të rastësishëm në një gamë qelizash me 12 rreshta për 5 kolona. Vini re se rutina ekzekuton ciklin e brendshëm (ciklin me numëruesin e rreshtit) një herë për çdo përsëritje të ciklit të jashtëm (cikli me numëruesin Col). Me fjalë të tjera, rutina ekzekuton deklaratën Cells(Row, Col) = Rnd 60 herë.
Këto qeliza u mbushën duke përdorur një lak të ndërthurur For-Next.
Nën Fillimi Range()
Dim Col Sa Long
Rreshti i zbehtë për aq kohë sa
Për Kol = 1 deri në 5
Për rreshtin = 1 deri në 12
Cells(Rresht, Kol) = Rnd
Rreshti tjetër
Kol
Fundi Nën
Shembulli tjetër përdor unazat e mbivendosura For-Next për të inicializuar një grup tre-dimensional me vlerën 100. Kjo rutinë ekzekuton deklaratën në mes të të gjitha sytheve (deklarata e caktimit) 1000 herë (10 * 10 * 10), çdo herë me një kombinim të ndryshëm vlerash për i, j dhe k:
Nën NestedLoops()
Dim MyArray (10, 10, 10)
Dim i Sa Long
Dim j Sa kohë
Dim k Sa gjate
Për i = 1 deri në 10
Për j = 1 deri në 10
Për k = 1 deri në 10
MyArray(i, j, k) = 100
Tjetra k
Tjetra j
Tjetra i
Deklaratat e tjera shkojnë këtu
Fundi Nën
Ja një shembull i fundit që përdor sythe të mbivendosur For-Next, me një vlerë Step. Kjo procedurë krijon një tabelë duke ndryshuar ngjyrën e sfondit të qelizave të alternuara.
Përdorimi i sytheve për të krijuar një model shahu.
Numëruesi i rreshtit qarkullon nga 1 në 8. Një konstruksion If-Then përcakton se cilën strukturë të mbivendosur For-Next do të përdoret. Për rreshtat me numër tek, numëruesi Col fillon me 2. Për rreshtat me numër çift, numëruesi Col fillon me 1. Të dy unazat përdorin një vlerë Step prej 2, kështu që qelizat alternative preken. Dy deklarata shtesë i bëjnë qelizat katrore (ashtu si një tabelë e vërtetë shahu).
Nën MakeCheckerboard()
Dim R për sa kohë, C për aq kohë
Për R = 1 deri në 8
If WorksheetFunction.IsOdd(R) Pastaj
Për C = 2 në 8 Hapi 2
Qeliza(R, C).E brendshme.Ngjyra = 255
Tjetra C
Përndryshe
Për C = 1 në 8 Hapi 2
Qeliza(R, C).E brendshme.Ngjyra = 255
Tjetra C
Fundi Nëse
Tjetra R
Rreshtat (“1:8”). Lartësia e rreshtit = 35
Kolonat(“A:H”).Gjerësia e kolonës = 6.5
Fundi Nën