Selles artiklis oleme käsitlenud erinevaid VBA -s kasutatavaid silmuseid ja nende kasutamist sama ülesande täitmiseks erineval viisil.
Miks Loops?
Looping on üks võimsamaid programmeerimisvõtteid, mida kasutatakse paljudes programmeerimiskeeltes. Loopimist kasutatakse koodiploki kordamiseks vajaliku arvu kordi või seni, kuni antud tingimus on tõene või saavutatakse konkreetne väärtus, mille järel käivitatakse järgmine koodiplokk.
Exceli VBA -ahela eesmärk on panna Excel teatud arvu kordi kooditükki kordama. Saate määrata, mitu korda koodi tuleb korrata fikseeritud numbrina (nt tehke seda 10 korda) või muutujana (nt tehke seda nii mitu korda, kui on andmeridu).
Exceli silmuseid saab konstrueerida erinevatel tingimustel erineval viisil. Sageli võib samu tulemusi saada erinevatel viisidel vastavalt teie isiklikele eelistustele.
Excel VBA -s on saadaval kolme erinevat tüüpi silmuseid:
1. TEE KUNI Loop
2. TEE KUI Loop
3. Loopi jaoks
1. TEE KUNI Loop
Tsüklit DO UNTIL kasutatakse korduvalt koodiploki kordamiseks, kuni määratud tingimus on seatud väärtusele True. Seisundit saab kontrollida silmuse alguses või lõpus. Lause DO UNTIL… LOOP testib algseisundit, samas kui DO… LOOP UNTIL avaldus testib silmuse lõpus olevat seisundit.
DO KUNI… LOOP lause süntaks
Tehke kuni [tingimus]
[Korduv koodiplokk]
Loop
Lause DO… LOOP KUNI süntaks
Tehke
[Korduv koodiplokk]
Tsükkel kuni [tingimus]
Oleme näite abil selgitanud DO… KUNI silmuseni. Makroid Loop1 ja Loop2 kasutatakse veeru A ja veeru B numbrite keskmise arvutamiseks, kasutades tsüklit DO… UNTIL.
Näidisandmed on vahemikus A15: B27. Veerg A sisaldab vooru 1 hindeid ja veerg B vooru 2 hindeid. Tahame arvutada C ja 1 vooru tulemuste keskmised.
Loop1 makro puhul kasutasime aktiivse lahtri keskmise valemi sisestamiseks valemit „FormulaR1C1”. Tsükli DO UNTIL tingimuslauset kontrollitakse tsükli lõpus.
Loop2 makro puhul kasutasime aktiivsesse lahtrisse keskmise väärtuse sisestamiseks funktsiooni „WorksheetFunction.Average”. Isegi selle makro puhul kontrollitakse tingimuslauset silmuse lõpus.
Ainus erinevus Loop1 ja Loop2 makro vahel on see, et Loop1 lisab keskmise valemi, samas kui Loop2 arvutab keskmise ja seejärel lisab keskmise väärtuse aktiivsesse lahtrisse.
2. TEE KUI Loop
Loopi DO WHILE kasutatakse koodiploki määramata arvu kordamiseks, samas kui määratud tingimus on jätkuvalt tõene ja peatub, kui tingimus tagastab vale. Seisundit saab kontrollida silmuse alguses või lõpus. Lause DO WHILE… LOOP testib algseisundit, samas kui DO… LOOP WHILE lause testib silmuse lõpus olevat tingimust. Lauset DO… LOOP WHILE kasutatakse juhul, kui soovime, et tsükkel käivitaks koodiploki vähemalt korra enne tingimuse kontrollimist.
Lause DO WHILE… LOOP süntaks
Tee samal ajal [tingimus]
[Korduv koodiplokk]
Loop
Lause DO… LOOP WHILE süntaks
Tehke
[Korduv koodiplokk]
Tsükli tegemine [tingimus]
Selles näites kasutatakse makrosid Loop3 ja Loop4, et arvutada veeru A ja B veeru lahtrite väärtuste keskmised väärtused. Mõlemad makrod töötavad samade prooviandmetega, mida kasutavad makrod Loop1 ja Loop2. Mõlemad kasutavad andmeid sisaldava vahemiku vaatamiseks lauset DO WHILE.
Ainus erinevus Loop3 ja Loop4 makro vahel on see, et need on erinevad viisid DO WHILE silmuse tingimuste esitamiseks.
Kuna Loop3 ja Loop4 makrod kasutavad samu sisendandmeid ja täidavad isegi samu funktsioone nagu Loop1 makro, nii et tagastatav väljund on sama mis Loop1 makro.
3. AASTA jaoks
Loopi jaoks kasutatakse koodiploki kordamiseks teatud arvu kordi.
Ahela FOR süntaks
For count_variable = start_value To end_value
[koodiplokk]
Järgmine loendusmuutuja
Loop5 makro näitab, kuidas kasutada FOR silmust keskmise arvutamiseks. Samuti kasutab see samu näidisandmeid, mida kasutavad teised makrod. Oleme kasutanud lähteväärtusena 15, kuna prooviandmed algavad 15 -stth rida. Viimase andmeid sisaldava rea leidmiseks oleme kasutanud vahemikku ("A" & Cells.Rows.Count) .End (xlUp) .Row. FOR tsükkel kordub (viimane rakk- 15) mitu korda.
Väljund tagastati pärast Loop5 makro käivitamist sama mis Loop1 makro.
Loop6 makro luuakse keskmise arvutamiseks ainult siis, kui aktiivne lahter, millel on keskmine funktsioon, on enne makro käivitamist tühi.
Selle makro näidisandmed on vahemikus E15 kuni G27.
Oleme määratletud vahemiku läbimiseks kasutanud DO… LOOP WHILE. IF -lauset kasutatakse selle kontrollimiseks, kas lahter, kuhu funktsioon sisestatakse, sisaldab väärtust. See makro lisab lahtrisse keskmise funktsiooni ainult siis, kui see on tühi.
Loop7 makro kasutatakse ka keskmise arvutamiseks. See kontrollib abiveerus olevaid väärtusi, enne kui hindab, kas uuesti loopida. Samuti kontrollib see, kas keskmises funktsioonis kasutatav lahtri viide on tühi.
Loop7 makro jaoks kasutatud näidisandmed on vahemikus J15: M27.
Veergu M kasutatakse abistava veeruna. See makro lisab keskmise funktsiooni ainult siis, kui veeru M lahter pole tühi. See makro kontrollib enne keskmise funktsiooni sisestamist, kas lahter peaks olema tühi. See ei sisesta keskmist funktsiooni, kui keskmises funktsioonis viidatud lahter on tühi.
Palun järgige koodi allpool
Valik Selgesõnaline alamring 1 () 'Keskmise arvutamine' Kuni tsükkel ringleb seni, kuni aktiivse lahtri eelmise veeru lahter on tühi Vahemik ("C15"). Valige "Tehke" Keskmise funktsiooni määramine kahe eelmise järjestikuse veeru ActiveCell lahtrite väärtusele. ValemR1C1 = "= Keskmine (RC [-1], RC [-2])" 'Järgmise rea lahtrisse liikumine ActiveCell.Offset (1, 0). Valige' Kontrollige, kas eelmise veeru lahtri väärtus on tühi 'Tehke kuni silmus pöörleb seni, kuni tingimuslause tagastab tõelise silmuse kuni isEmpty (ActiveCell.Offset (0, -1)) vahemik ("A15"). Valige End Sub Sub Loop2 () 'Keskmise arvutamine' aktiivse lahtri veerg on tühi 'See makro sarnaneb makroga Loop1, ainus viis keskmise arvutamiseks on erinev Vahemik ("C15"). Valige Do' Worsheet.Average funktsiooni kasutatakse keskmise ActiveCell.Value = WorksheetFunction.Average ( ActiveCell.Offset (0, -1) .Väärtus, _ ActiveCell.Offset (0, -2) .Väärtus) ActiveCell.Offset (1, 0). Valige Loop Before IsEmpty (ActiveCel l.Nihke (0, -1)) vahemik ("A15"). Valige End Sub Sub Loop3 () 'Keskmise Do' arvutamise tsükkel arvutatakse, kuni aktiivse lahtri eelmise veeru lahter on tühi Vahemik ("C15") . Valige 'Kontrollimine, kas eelmise veeru lahtri väärtus on tühi' Do while silmus tsükeldatakse seni, kuni tingimuslause on True Do When IsEmpty (ActiveCell.Offset (0, -1)) = False 'Keskmise funktsiooni määramine eelmise lahtri väärtusele kaks järjestikust veergu ActiveCell.FormulaR1C1 = "= Keskmine (RC [-1], RC [-2])" 'Liikumine järgmise rea lahtrisse ActiveCell.Nihke (1, 0). Valige Loop Range ("A15"). Valige End Sub Sub Loop4 () 'Keskmise arvutamine' Do while tsükkel töötab seni, kuni aktiivse lahtri eelmise veeru lahter on tühi 'See makro sarnaneb makro Loop3 -ga, ainus viis tingimuse rakendamiseks on erinev vahemik ("C15"). Kas ei ole tühi (ActiveCell.Offset (0, -1)) ActiveCell.FormulaR1C1 = "= Keskmine (RC [-1], RC [-2])" ActiveCell.Offset (1, 0). Valige Loop Range (" A15 "). Fikseeritud numbri jaoks valige Alam alamring 5 () 'Ahela kordused kordade arv, mis on määratud ridade arvuga Dim i, lastcell As Long 'Viimase rea leidmine, mis sisaldab veerus A andmeid lastcell = Vahemik ("A" ja lahtrid.Ridad.arv) .End (xlUp) .Rida vahemik ("C15 "). Valige muutuja" i muutujale väärtus 15, kuna meie prooviandmed algavad 15. realt "FOR Loop silmus x For i = 15 For lastcell ActiveCell.FormulaR1C1 =" = Keskmine (RC [-1], RC [-2 ]) "ActiveCell.Offset (1, 0). Valige Next i Range (" A15 "). Valige End Sub Sub Loop6 () 'Keskmise' Arvutamise tegemine kuni tsükkel arvutamine, kuni aktiivse lahtri eelmise veeru lahter on tühi ' See ei arvuta keskmist, kui lahtrivahemikus ("G15") on juba midagi. Valige Do If IsEmpty (ActiveCell) Siis ActiveCell.FormulaR1C1 = "= Keskmine (RC [-1], RC [-2])" Lõpp Kui ActiveCell.Nihke (1, 0). Valige Loop Before IsEmpty (ActiveCell.Offset (0, -1)) Vahemik ("E15"). Valige End Sub Sub Loop7 () 'Do Before loop is tiek long as midagi järgmise veeru lahtris 'See ei arvuta keskmist, kui aktiivses c on juba midagi ell 'Samuti siis, kui lahtrites pole andmeid, mida kasutatakse keskmise funktsiooni piires (vigade vältimiseks #DIV/0). 'Keskmise vahemiku arvutamine ("L15"). Valige Do If IsEmpty (ActiveCell) Siis If IsEmpty (ActiveCell.Offset (0, -1)) And IsEmpty (ActiveCell.Offset (0, -2)) Siis ActiveCell.Value = " "Else ActiveCell.FormulaR1C1 =" = Keskmine (RC [-1], RC [-2]) "End If End Kui ActiveCell.Nihke (1, 0). Valige Loop Before IsEmpty (ActiveCell.Offset (0, 1)) Vahemik ("J15"). Valige Lõpeta alam
Kui teile see blogi meeldis, jagage seda oma sõpradega Facebookis. Lisaks saate meid jälgida Twitteris ja Facebookis.
Tahaksime sinust kuulda, andke meile teada, kuidas saaksime oma tööd paremaks muuta ja teie jaoks paremaks muuta. Kirjuta meile meilisaidile