VBA-da döngələr

VBA proqramının eyni hərəkətlər toplusunu ardıcıl olaraq bir neçə dəfə yerinə yetirməsi tələb olunduğu hallar var (yəni, eyni kod blokunu bir neçə dəfə təkrarlayın). Bu, VBA döngələrindən istifadə etməklə edilə bilər.

VBA döngələrinə aşağıdakılar daxildir:

Sonra, bu dövrlərin hər birinə daha yaxından nəzər salacağıq.

Visual Basic-də Döngü Operatoru üçün

Döngü operatorunun strukturu The Visual Basic-də iki formadan birində təşkil edilə bilər: döngə kimi Üçün... Sonrakı və ya bir döngə kimi Hər biri üçün.

"Üçün ... Sonrakı" dövrü

velosiped Üçün... Sonrakı verilmiş diapazondan ardıcıl olaraq dəyərlər alan dəyişəndən istifadə edir. Dəyişən dəyərinin hər dəyişməsi ilə dövrün gövdəsinə daxil edilmiş hərəkətlər yerinə yetirilir. Bunu sadə bir nümunədən başa düşmək asandır:

i üçün = 1 - 10 Cəmi = Ümumi + iArray(i) Sonrakı i

Bu sadə döngədə Üçün... Sonrakı dəyişən istifadə olunur i, ardıcıl olaraq 1, 2, 3, … 10 dəyərlərini qəbul edir və bu dəyərlərin hər biri üçün dövrə daxilində VBA kodu yerinə yetirilir. Beləliklə, bu döngə massivin elementlərini cəmləşdirir. iArray dəyişən Ümumi.

Yuxarıdakı misalda, dəyişəni artırmaq üçün döngə artımı göstərilməyib i 1-dən 10-a qədər, standart artımdır 1… Bununla belə, bəzi hallarda döngə üçün müxtəlif artım dəyərlərindən istifadə etmək lazımdır. Bu açar sözdən istifadə etməklə edilə bilər Addımaşağıdakı sadə nümunədə göstərildiyi kimi.

d = 0-dan 10-a qədər addım üçün 0.1 dCəmi = dCəmi + d Sonrakı d

Yuxarıdakı misalda artım addımı bərabər təyin olunduğundan 0.1, sonra dəyişən dCəmi dövrün hər təkrarı üçün 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 dəyərlərini alır.

VBA-da döngə addımını müəyyən etmək üçün mənfi dəyərdən istifadə edə bilərsiniz, məsələn, bu kimi:

i = 10-dan 1-ə qədər -1 üçün iArray(i) = i Sonrakı i

Artım buradadır -1, belə ki, dəyişən i dövrün hər təkrarlanması ilə 10, 9, 8, … 1 dəyərlərini alır.

Döngə "Hər biri üçün"

velosiped Hər biri üçün dövrünə bənzəyir Üçün... Sonrakı, lakin sayğac dəyişəni üçün dəyərlər ardıcıllığı üzərində təkrarlamaq əvəzinə, döngə Hər biri üçün müəyyən edilmiş obyektlər qrupunda hər bir obyekt üçün hərəkətlər toplusunu yerinə yetirir. Aşağıdakı nümunədə, bir döngə istifadə edərək Hər biri üçün cari Excel iş kitabındakı bütün vərəqləri sadalayır:

İş vərəqlərindəki hər bir wSheet üçün iş vərəqi kimi wSheet'i söndürün MsgBox "Nəydən siyahı: " & wSheet.Name Next wSheet

Döngə kəsilməsi ifadəsi "Çıxış üçün"

Operator Üçün çıxın dövrü dayandırmaq üçün istifadə olunur. Kodda bu ifadə ilə rastlaşan kimi proqram dövrənin icrasını bitirir və dərhal bu döngədən sonra kodda olan ifadələrin icrasına keçir. Bu, məsələn, massivdə müəyyən bir dəyəri axtarmaq üçün istifadə edilə bilər. Bunun üçün bir döngədən istifadə edərək massivin hər bir elementi skan edilir. Tələb olunan element tapılan kimi, qalanları nəzərdən keçirməyə ehtiyac yoxdur - dövrə kəsilir.

Operator tətbiqi Üçün çıxın aşağıdakı misalda nümayiş etdirilir. Burada dövrə 100-dən çox massiv girişini təkrarlayır və hər birini dəyişənin dəyəri ilə müqayisə edir dVal… Əgər uyğunluq tapılarsa, dövrə dayandırılır:

i üçün = 1-dən 100-ə qədər Əgər dValues(i) = dVal Onda IndexVal = i Sona Çıxın Əgər Növbətidirsə i

Visual Basic-də Do While Döngəsi

velosiped Edərkən göstərilən şərt yerinə yetirildiyi müddətcə kod blokunu icra edir. Aşağıda bir prosedur nümunəsidir Sub, hansı loop istifadə edir Edərkən 1000-dən çox olmayan Fibonacci nömrələri ardıcıl olaraq göstərilir:

'Alt prosedur 1000-dən çox olmayan Fibonacci ədədlərini çıxarır Sub Fibonacci() Dim i As Integer 'sayğacı ardıcıllığında elementin mövqeyini göstərmək üçün Dim iFib As Integer 'dim iFib As Integer ardıcıllığının cari dəyərini saxlayır Dim iFib_Next As Integer ' növbəti dəyəri saxlayır ardıcıllığın Dim iStep As Integer 'növbəti artımın ölçüsünü saxlayır 'i və iFib_Next dəyişənlərini işə salın i = 1 iFib_Next = 0 'Do while dövrəsi 'cari Fibonacci nömrəsinin dəyəri 1000-dən böyük olana qədər yerinə yetiriləcək Doext_1000iF = If1F 1 Sonra 'ilk element üçün xüsusi hal iStep = 0 iFib = 1 Else 'ardıcıllığın cari dəyərinin üzərinə yazmazdan əvvəl növbəti artımın ölçüsünü yadda saxlayın iStep = iFib iFib = iFib_Next End Əgər 'cari Fibonacci nömrəsini A sütununda çap edin. aktiv iş vərəqi 'i Cells(i , 1) indeksli cərgədə. Value = iFib 'növbəti Fibonacci nömrəsini hesablayın və element mövqeyi indeksini 1 artırın iFib_Next = iFib + iStep i = i + XNUMX Loop End Sub

Verilmiş nümunədə şərt iFib_Next < 1000 döngənin əvvəlində yoxlanılır. Buna görə, əgər ilk dəyər iFib_Next Əgər 1000-dən çox olsaydı, döngə heç vaxt icra olunmazdı.

Döngəni həyata keçirməyin başqa bir yolu Edərkən - şərti döngənin əvvəlinə deyil, sonuna qoyun. Bu halda, şərtin yerinə yetirilib-yetirilməməsindən asılı olmayaraq, dövrə ən azı bir dəfə yerinə yetiriləcəkdir.

Sxematik olaraq belə bir dövrə Edərkən sonunda yoxlanılacaq şərtlə belə görünəcək:

Do ... iFib_Next < 1000 olarkən loop edin

Visual Basic-də "Do Until" düyməsini basın

velosiped Qədər edin dövrəyə çox bənzəyir Edərkən: dövrənin gövdəsindəki kod bloku göstərilən şərt yerinə yetirilənə qədər təkrar-təkrar yerinə yetirilir (şərti ifadənin nəticəsi Doğru). Növbəti prosedurda Sub dövrü istifadə edərək Qədər edin sütundakı bütün xanalardan dəyərləri əldə edin A sütun boş xana ilə qarşılaşana qədər iş vərəqi:

iRow = 1 IsEmpty (Cells(iRow, 1)) 'Cari xananın dəyəri dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) massivində saxlanılır. Dəyər iRow = iRow + 1 Döngü

Yuxarıdakı nümunədə şərt IsEmpty(Hüceyrələr(iRow, 1)) strukturun başlanğıcında yerləşir Qədər edin, beləliklə, ilk alınan xana boş deyilsə, dövrə ən azı bir dəfə yerinə yetiriləcək.

Bununla belə, döngə nümunələrində göstərildiyi kimi Edərkən, bəzi hallarda şərti ifadənin ilkin nəticəsindən asılı olmayaraq dövrənin ən azı bir dəfə yerinə yetirilməsi zəruridir. Bu halda, şərti ifadə döngənin sonunda belə yerləşdirilməlidir:

Edin ... Boş olana qədər Döngə edin(Cells(iRow, 1))

Cavab yaz