Vba pentru următorul trece la următoarea valoare. Bucle în VBA. Ieșire pentru operatorul de întrerupere a buclei

28.03.2020 Sfat

Pentru... bucla următoare VBA Excel, sintaxa acesteia și descrierea componentelor individuale. Exemple de utilizare a buclei For...Next.

Bucla For...Next din VBA Excel este concepută pentru a executa un grup de instrucțiuni de numărul necesar de ori, specificat de variabila de control al buclei - contorul. Pe măsură ce bucla se execută, valoarea contorului după fiecare iterație este incrementată sau decrementată cu numărul specificat de expresia instrucțiunii Step sau, implicit, cu unul. Când trebuie să treceți în buclă peste elemente al căror număr și indexare într-un grup (gamă, matrice, colecție) sunt necunoscute, ar trebui să utilizați .

Sintaxa pentru buclă... În continuare

For counter = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ] For counter = start To end [ Step step ] [ statements ] [ Exit For ] [ statements ] Next [ counter ]

ÎN paranteza patrata sunt specificate atributele opționale ale buclei For...Next.

Componentele pentru... Următorul ciclu

Componentă Descriere
tejghea Atribut obligatoriu. O variabilă numerică care acționează ca un numărător, numită și variabilă de control al buclei.
start Atribut obligatoriu. O expresie numerică care specifică valoarea inițială a contorului.
Sfârşit Atribut obligatoriu. O expresie numerică care specifică valoarea finală a contorului.
Etapa* Atribut opțional. O instrucțiune care indică faptul că va fi specificat un pas de buclă.
Etapa Atribut opțional. O expresie numerică care specifică pasul buclei. Poate fi pozitiv sau negativ.
declarații Atribut opțional**. Operatorii din codul dvs.
Ieșire pentru Atribut opțional. Operatorul iese dintr-o buclă înainte de a se termina.
Următorul [contor] Aici tejghea- atribut optional. Acesta este același nume al variabilei de control al buclei, care poate fi omisă aici.

*Dacă atributul Etapa lipsește, bucla For...Next este executată cu un pas implicit egal cu 1 .

**Dacă nu folosiți propriul cod într-o buclă, se pierde sensul utilizării unei bucle.

Exemple de For... Buclele următoare

Puteți copia bucle de probă în modulul VBA, le puteți rula una câte una și puteți vedea rezultatele.

Cel mai simplu ciclu

Completați primele zece celule din prima coloană a foii active Excelează în cifre de la 1 la 10:

Sub test1() Dim i As Long For i = 1 To 10 Cells(i, 1) = i Next End Sub

Cel mai simplu ciclu cu pași

La bucla anterioară a fost adăugat un operator Step cu o valoare de 3, iar rezultatele sunt scrise în a doua coloană:

Sub test2() Dim i As Long For i = 1 To 10 Pasul 3 Celule (i, 2) = i Next End Sub

Buclă cu argumente negative

Această buclă umple primele zece celule ale celei de-a treia coloane în ordine inversă:

Sub test3() Dim i As Long For i = 0 To -9 Step -1 Cells(i + 10, 3) = i + 10 Next End Sub

Mărim dimensiunea pasului la -3 și scriem rezultatele în a patra coloană a foii Excel active:

Sub test4() Dim i As Long For i = 0 To -9 Step -3 Cells(i + 10, 4) = i + 10 Next End Sub

Buclă imbricată

Bucla exterioară setează secvențial indicii primelor zece rânduri ale foii active, iar bucla imbricată adaugă numerele din primele patru celule ale rândului cu indicele curent și scrie suma în celula celei de-a cincea coloane. Înainte de a începe o buclă imbricată cu adăugare cumulativă, resetam a cincea celulă a rândului corespunzător, astfel încât, dacă există un număr în ea, acesta nu va fi adăugat la total.

Sub test5() Dim i1 As Long, i2 As Long Pentru i1 = 1 To 10 "Atribuiți a cincea celulă din rândul i1 0 Cells(i1, 5) = 0 For i2 = 1 To 4 Cells(i1, 5) = Cells( i1 , 5) + Cells(i1, i2) Next Next End Sub

Ieșiți din buclă

În a șasea coloană a foii active vom scrie numele a zece animale, bineînțeles, folosind bucla For... Următoarea:

Sub test6() Dim i As Long For i = 1 To 10 Cells(i, 6) = Alegeți(i, „Urs”, „Elefant”, „Girafa”, „Antilope”, _ „Crocodil”, „Zebră”, „Tigru”, „Șopârlă”, „Leu”, „Hipopotam”) Next End Sub

Următoarea buclă va căuta în a șasea coloană un crocodil care a mâncat galoșuri. În celula coloanei a șaptea, bucla va scrie linia „A fost o buclă aici” până când întâlnește un crocodil, iar când găsește un crocodil, va scrie „A mâncat galoșurile” și va înceta să lucreze executând Ieșirea. Pentru comandă. Acest lucru va fi vizibil în celulele de lângă numele animalelor de sub crocodil, care nu va conține textul „A existat un ciclu aici”.

Sub test7() Dim i As Long For i = 1 To 10 If Cells(i, 6) = "Crocodil" Then Cells(i, 7) = "He ate the galoshes" Exit For Else Cells(i, 7) = " Aici a existat un ciclu" End If Next End Sub

Astfel de date sunt active Foaie Excel veți obține dacă îl rulați secvențial în editorul VBA toate cele șapte subrutine din exemplele care demonstrează funcționarea buclelor For...Next.

Buclă cu argumente fracționale

Atributele de început, sfârșit și pas pot fi reprezentate printr-un număr, o variabilă sau o expresie numerică:

Pentru i = 1 La 20 Pasul 2 Pentru i = a To b Pasul c Pentru i = a - 3 La 2b + 1 Pasul c/2

Calcularea valorii unei variabile în afara unei bucle sau a unei expresii în interiorul acesteia poate duce la un rezultat fracționar. VBA Excel îl va rotunji la un număr întreg folosind:

„Valorile atributelor înainte de rotunjire Pentru i = 1,5 la 10,5 Pasul 2.51 „Valori atribute rotunjite” Pentru i = 2 la 10 Pasul 3

Încercați să nu permiteți valori de argument nerotunjite în corpul buclei For...Next, pentru a nu obține rezultate imprevizibile din execuția acesteia. Dacă nu puteți face fără numere fracționale, dar trebuie să utilizați rotunjirea obișnuită, utilizați-o în codul dvs Funcția VBA worksheet WorksheetFunction.Round pentru a rotunji numărul înainte de a-l folosi în bucla For...Next.

Există situații în care unui program VBA este necesar să efectueze același set de acțiuni de mai multe ori la rând (adică, repetă același bloc de cod de mai multe ori). Acest lucru se poate face folosind bucle VBA.

For Loop Statement în Visual Basic

Structura instrucțiunii buclei Pentru V Visual Basic poate fi organizat în una din două forme: ca o buclă Pentru următorul sau ca un ciclu Pentru fiecare.

Ciclul „Pentru... Următorul”

Ciclu Pentru următorul folosește o variabilă care preia secvențial valori dintr-un interval dat. La fiecare modificare a valorii variabilei, sunt efectuate acțiunile conținute în corpul buclei. Acest lucru este ușor de înțeles dintr-un exemplu simplu:

Pentru i = 1 până la 10 Total = Total + iArray(i) Următorul i

În această buclă simplă Pentru următorul este utilizată variabila i, care ia secvențial valorile 1, 2, 3, ... 10, iar pentru fiecare dintre aceste valori este executat codul VBA din interiorul buclei. Astfel, această buclă însumează elementele matricei iArrayîntr-o variabilă Total.

În exemplul de mai sus, pasul de incrementare a buclei nu este specificat, deci pentru a incrementa variabila i De la 1 la 10, valoarea implicită este increment 1 . Cu toate acestea, în unele cazuri, este necesar să utilizați valori de increment diferite pentru buclă. Acest lucru se poate face folosind cuvânt cheie Etapa, așa cum se arată în exemplul simplu următor.

Pentru d = 0 la 10 Pasul 0,1 dTotal = dTotal + d Următorul d

Deoarece în exemplul de mai sus, pasul de creștere este setat la 0.1 , apoi variabila dTotal pentru fiecare repetare a ciclului ia valorile 0,0, 0,1, 0,2, 0,3, ... 9,9, 10,0.

Pentru a determina pasul buclei în VBA, puteți utiliza o valoare negativă, de exemplu, astfel:

Pentru i = 10 To 1 Step -1 iArray(i) = i Next i

Aici este pasul de creștere -1 , deci variabila i cu fiecare repetare a ciclului ia valorile 10, 9, 8, ... 1.

Pentru fiecare buclă

Ciclu Pentru fiecare arata ca un ciclu Pentru următorul, dar în loc să parcurgeți secvența de valori pentru variabila contor Pentru fiecare efectuează un set de acțiuni pentru fiecare obiect dintr-un grup specificat de obiecte. În exemplul următor, folosind o buclă Pentru fiecare Sunt listate toate foile din foaia curentă registrul de lucru Excela:

Dim wSheet ca foaie de lucru pentru fiecare wSheet din foile de lucru MsgBox "Sheet Found: " & wSheet.Name Next wSheet

Ieșire pentru operatorul de întrerupere a buclei

Operator Ieșire pentru folosit pentru a întrerupe ciclul. De îndată ce această instrucțiune este întâlnită în cod, programul încheie execuția buclei și trece la executarea instrucțiunilor găsite în cod imediat după această buclă. Aceasta poate fi folosită, de exemplu, pentru a căuta o anumită valoare într-o matrice. Pentru a face acest lucru, utilizați o buclă pentru a căuta prin fiecare element al matricei. Odată ce elementul necesar este găsit, nu mai este nevoie să vă uitați prin restul - ciclul este întrerupt.

Aplicație de operator Ieșire pentru demonstrat în exemplul următor. Aici bucla trece prin 100 de intrări de matrice și compară fiecare cu valoarea variabilei dVal. Dacă se găsește o potrivire, bucla este întreruptă:

Pentru i = 1 până la 100 Dacă dValues(i) = dVal Atunci IndexVal = i Ieșire pentru End If Next i

Faceți bucla While în Visual Basic

Ciclu Face în timp ce execută un bloc de cod atâta timp cât o anumită condiție este îndeplinită. Următorul este un exemplu de procedură Sub, în care, folosind o buclă Face în timp ce Numerele Fibonacci care nu depășesc 1000 sunt afișate secvenţial:

„Procedura Sub tipărește numere Fibonacci care nu depășesc 1000 Sub Fibonacci() Dim i As Integer „un contor pentru a indica poziția unui element în secvența Dim iFib As Integer „stochează valoarea curentă a secvenței Dim iFib_Next As Integer „stochează următoarea valoare a secvenței Dim iStep As Integer „stochează dimensiunea următorului increment „inițializează variabilele i și iFib_Next i = 1 iFib_Next = 0 „bucla Do While va fi executată până când valoarea „numărului actual Fibonacci depășește 1000 Do În timp ce iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

În exemplul dat, condiția iFib_Next< 1000 verificat la începutul ciclului. Prin urmare, dacă prima valoare iFib_Next Dacă ar fi mai mult de 1000, atunci bucla nu ar fi executată nici măcar o dată.

O altă modalitate de a implementa o buclă Face în timp ce– plasați condiția nu la început, ci la sfârșitul buclei. În acest caz, bucla va fi executată cel puțin o dată, indiferent dacă condiția este adevărată.

Schematic un astfel de ciclu Face în timp ce cu condiția verificată la sfârșit, va arăta astfel:

Faceți... Buclă în timp ce iFib_Next< 1000

Faceți până la bucla în Visual Basic

Ciclu Face până la foarte asemănător cu un ciclu Face în timp ce: Blocul de cod din corpul buclei este executat din nou și din nou până când condiția specificată este îndeplinită (rezultatul expresiei condiționate este Adevărat). În procedura următoare Sub folosind o buclă Face până la extrage valori din toate celulele dintr-o coloană A foaie de lucru până când se întâlnește o celulă goală în coloană:

IRow = 1 Do Until IsEmpty(Cells(iRow, 1)) "Valoare celula curentă stocat în matrice dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Valoare iRow = iRow + 1 buclă

În exemplul de mai sus condiția IsEmpty(Celele(iRow, 1)) situat la începutul structurii Face până la, prin urmare, bucla va fi executată cel puțin o dată dacă prima celulă luată nu este goală.

Cu toate acestea, așa cum sa arătat în exemplele de buclă Face în timp ce, în unele situații doriți ca bucla să fie executată cel puțin o dată, indiferent de rezultatul inițial al expresiei condiționate. În acest caz, expresia condiționată ar trebui plasată la sfârșitul buclei, astfel:

Efectuați... Buclă până când este gol(Celele(iRând, 1))

Ciclu este un grup de instrucțiuni care sunt executate în mod repetat. Pentru a organiza bucle în VBA, adică pentru a executa în mod repetat una sau mai multe instrucțiuni, puteți folosi două grupuri principale: bucle cu enumerarea For...Next și bucle cu condiția Do... Loop. Există două soiuri Pentru următorul(For-Next și For Each-Next) și două tipuri de bucle Fă... Buclă(Do While...Loop și Do Until...Loop), care diferă în funcție de tipul de condiție testată.

Bucla pentru Următoarea

Cea mai comună buclă din VBA este bucla de enumerare For-Next. Această buclă trebuie să stabilească limite (valorile inițiale și finale ale contorului) în care variabila buclă se va schimba.

Instrucțiunea buclă are următoarea sintaxă:
Pentru Pentru n=1)
Acea Valoarea finală ( Acea 10)
Etapa Crește ( Etapa 2)

Următorul[tejghea]

Aici variabila este un contor, valoarea variabilei crește sau scade cu fiecare iterație a buclei. Dacă nu există un pas în construcția buclei, atunci incrementul este 1 (implicit). Pentru a ieși mai devreme dintr-o instrucțiune buclă, de ex. Înainte ca contorul să atingă valoarea finală, operatorul trebuie introdus în construcția buclei Ieșire pentru.

Ținând cont Ieșire pentru Instrucțiunea buclă are următoarea sintaxă:
Pentru contor = Valoarea initiala(de exemplu, De exemplu, Pentru n=1)
Acea Valoarea finală ( Acea 10)
Etapa Crește ( Etapa 2)
[Instrucțiuni] sau [Bloc operator]
Ieșire pentru
Următorul[tejghea]

Pentru a procesa un grup de obiecte sau matrice omogene, se utilizează următoarea construcție a buclei:
Pentru fiecare Element În Grup (numele unui grup de obiecte similare)
[Instrucțiuni] sau [Bloc operator]
Ieșire pentru
Următorul element

Bucle cu condiția Do While...Loop și Do Until...Loop

Instrucțiunea Do While...Loop se execută în bucle atâta timp cât este îndeplinită o condiție specificată. Trebuie remarcat faptul că condiția este verificată înainte ca instrucțiunea sau grupul de instrucțiuni să fie executată.

În acest caz, sintaxa instrucțiunilor Do While...Loop este următoarea:
Face în timp ce condiție (de exemplu, x<20)
[Instrucțiuni] sau [Bloc operator]
Ieșiți Do
Buclă


Do
[Instrucțiuni] sau [Bloc operator]
Ieșiți Do
Buclă în timp ce condiție

Instrucțiunea Do Until...Loop se execută în buclă până când este îndeplinită o condiție, iar când condiția este îndeplinită, instrucțiunea iese din buclă. Condiția este verificată înainte de executarea unei instrucțiuni sau a unui grup de instrucțiuni.

În acest caz, sintaxa operatorilor de buclă Do Until...Loop este următoarea:
Face până la condiție (de exemplu, x=20)
[Instrucțiuni] sau [Bloc operator]
Ieșiți Do
Buclă

Dacă trebuie să verificați o condiție după ce instrucțiunile sau un bloc de instrucțiuni au fost executate cel puțin o dată, atunci puteți utiliza următoarea construcție a operatorului de buclă:
Do
[Instrucțiuni] sau [Bloc operator]
Ieșiți Do
Buclă până la condiție

Algoritmul For….Next ciclu este prezentat în Fig. 5.28.

Tejghea – orice variabilă numerică VBA, de obicei o variabilă Integer sau Long.

start - orice expresie numerică și determină valoarea inițială pentru variabila Counter.

Sfârşit – o expresie numerică care determină valoarea finală pentru o variabilă Tejghea .

Declarații – unul, mai mulți sau niciun operator. Aceste instrucțiuni execută corpul buclei. VBA execută fiecare dintre aceste instrucțiuni de fiecare dată când bucla este executată.

Cuvânt cheie Următorul

Counter=counter+StepSise

Fig.9.28. Pentru….Algoritmul buclei următoare

Cuvânt cheie Următorul spune VBA că sfârșitul buclei a fost atins. Variabila opțională Counter după cuvântul cheie Next trebuie să fie aceeași variabilă Counter care a fost specificată după cuvântul cheie For la începutul structurii buclei.

Sintaxă:

Pentru contor = Start To End

La executarea unei buclePentruUrmătorul VBAprocedează după cum urmează:

Atribuie valoarea reprezentată de Stea , variabil CU mătușă .

Execută toate instrucțiunile reprezentate de Declarații până ajunge la cuvântul cheie Următorul . Cuvânt cheie Următorul indică VBA că a fost atins capătul corpului buclei.

Modifică o variabilă CU mătușă prin suma StepSize (dacă este inclus cuvântul opțional Step) Dacă Step nu este definit, atunci VBA crește variabila contor cu 1.

Revine la începutul buclei și compară valoarea curentă a variabilei CU mătușă cu valoarea reprezentată de End. Dacă valoarea CU mătușă mai putin decat valoarea Sfârşit , VBA continuă execuția de la prima instrucțiune după cuvântul cheie Următorul .

9.2.4. I/O de tablouri unidimensionale și bidimensionale

matrice(matrice) este o colecție de variabile care au un nume și un tip de bază comun. O matrice este o modalitate convenabilă de a stoca mai multe elemente de date asociate într-un singur container pentru o mai mare comoditate și eficiență de programare. Toate elementele de date stocate într-o matrice trebuie să fie de același tip.

O matrice vă permite să stocați și să manipulați multe elemente de date printr-o singură variabilă. Pe lângă reducerea numărului total de nume de variabile diferite care trebuie urmărite, celălalt avantaj principal al utilizării tablourilor este că buclele pot fi folosite pentru a procesa cu ușurință diferite elemente ale matricei. Combinând tablouri și structuri de buclă (de obicei For....Next), puteți scrie un număr mic de instrucțiuni care procesează o cantitate mare de date. Efectuarea acelorași sarcini folosind variabile individuale poate necesita scrierea a sute de declarații.

Dimensiunea matricei

Limbajul de programare utilizează de obicei matrice unidimensionale și multidimensionale, dintre care unele descriu obiecte relativ simple, iar altele mai complexe.

Matrice unidimensionale

Un exemplu de matrice unidimensională este dat în tabelul nr. 9.9.

Tabelul nr. 9.9

În programare, numerotarea pe bază de zero este frecvent utilizată.

Pentru a accesa datele stocate într-un anumit element de matrice, trebuie să specificați numele matricei urmat de un număr numit index de element. Indexul este cuprins între paranteze. De exemplu, dacă tabloul din tabelul #1.1 este numit DoubleArray, atunci următoarea instrucțiune atribuie numărul 45 variabilei DoubleAny.

DoubleAny = DoubleArray (3)

În această declarație, numărul 3 este indexul matricei. Deoarece numerotarea elementelor începe de la zero, elementul referit de operator este, de fapt, al patrulea element al DoubleArray.

La executarea instrucțiunii DoubleArray, VBA selectează valoarea 45 și stochează acea valoare în variabila DoubleArray.

Același operator poate fi utilizat atunci când stocați date într-o matrice:

DoubleArray (5)=12.

Când această instrucțiune este executată, VBA plasează valoarea 12 în elementul de matrice specificat, înlocuind conținutul anterior al acelui element.

Matricele unidimensionale sunt utilizate în mod obișnuit pentru a reprezenta diverse liste de date.

Matrice multidimensionale

Atunci când este necesar să se reprezinte tabele de date cu date organizate în format de rânduri și coloane, pentru aceasta se folosesc matrice multidimensionale.

Într-o matrice bidimensională, adresa fiecărei celule este formată din două numere: numărul rândului (primul index) și numărul coloanei (al doilea indice). În VBA puteți crea matrice de până la 60 de dimensiuni.

Dacă numărul de elemente dintr-o matrice nu se modifică, atunci o astfel de matrice se numește static.

Matrice statice și dinamice

Dacă, atunci când executați un program VBA, puteți modifica numărul de elemente dintr-o matrice, atunci astfel de matrice se numesc dinamice. Pentru a modifica dimensiunea unui tablou dinamic, utilizați operatorul ReDim.

VBA menține o zonă de memorie rezervată pentru toate elementele dintr-o matrice atâta timp cât există variabila de tip matrice. Astfel de matrice sunt numite statice deoarece numărul de elemente din matrice nu se modifică.

OperatorOpțiune Baza

De obicei, VBA utilizează matrice bazată pe zero. Operatorul de bază de opțiuni vă permite să specificați 0 sau 1 ca sămânță implicită pentru indici de matrice. Dacă operatorul Opțiune Baza nu este utilizat, VBA începe numerotarea indexului de la 0 (implicit). Trebuie să plasați instrucțiunea Option Base în zona de declarare a modulului înainte de a declara orice variabile, constante sau proceduri. Nu puteți plasa o instrucțiune Option Base într-o procedură. Puteți avea doar o declarație de bază de opțiuni per modul.

Sintaxă:

Opțiune Baza 0|1

Declararea Arrays

Declararea unui tablou folosind un operator Dim are următoarea sintaxă.

Sintaxă:

DimVarName()

Dim VarName (sus, sus]....)[ La fel de tip],

VarName – orice nume pentru matrice care îndeplinește regulile VBA pentru denumirea identificatorilor.

Indice – dimensiunea matricei.

Ca tip – tipul de date.

Inferioară – limita inferioară a valorii indicelui.

Superioară – limita superioară a valorii indicelui.

Tip – tip de date

Dacă omiteți tipul, toate elementele matricei vor fi de tipul Variant. VBA inițializează elementele matricelor numerice la zerouri și elementele matricelor de șiruri în șiruri de caractere goale.

Dim str_array (de la 1 la 100) ca șir

Dim variant_array()

Dim str_Multiplication (0 la 15, 0 la 15) ca șir

Utilizarea Arrays

Pentru a accesa un element de matrice, trebuie să specificați numele matricei urmat de valoarea indexului, cuprins între paranteze.

Referirea la un element de matrice are următoarea sintaxă.

Sintaxă.

arrayName(validIndex1, ….)

validIndex – numele matricei.

validIndex1 – valoare de index validă pentru prima dimensiune a matricei.

validIndex2 – valoare de index validă pentru a doua dimensiune a matricei.

Trebuie să furnizați o valoare de index pentru fiecare dimensiune a matricei ori de câte ori accesați orice element al matricei.

I/O de tablouri unidimensionale

Când introduceți o matrice unidimensională, trebuie să introduceți secvențial primul, al doilea etc. elementele matricei acționează în mod similar la ieșire. Pentru a introduce sau a ieși o matrice, trebuie să organizați o buclă. Cea mai convenabilă modalitate de a introduce și ieși o matrice unidimensională este utilizarea unui algoritm care utilizează o buclă necondiționată.

Algoritmul de intrare/ieșire pentru o matrice unidimensională este prezentat în Fig. 5.29.

Procedura este explicată mai jos.

Sub Massiv() – numele procedurii.

Dim Mas (5) As Integer - declarat o matrice unidimensională cu 5 elemente, tipul numerelor este numere întregi.

Dim s As String – a declarat o variabilă de lucru pentru ieșirea finală a datelor din matrice în caseta de dialog. As String – tip de date din variabila de stocare.

For i = 1 To 5 – procedura din prima buclă For….Next preia numere întregi de la 1 la 5 și le pune într-o matrice.

Mas (i) = InputBox (i) – intrarea unui număr întreg pentru al-lea element.

Următorul – trecerea la al doilea ciclu (elementele matricei sunt introduse într-o linie și afișate într-o casetă de dialog folosind operatorul MsgBox).

Pentru i = 1 până la 5 – elemente din rândul 1 până la 5.

s = s & Mas(i) & “ ;” - formarea unui șir din elemente de matrice. Matricea este imprimată pe o singură linie. Elementele matricei sunt separate prin caracterul „;”.

MsgBox s – ieșirea matricei introduse anterior.

Fig.5.27. Algoritm de intrare-ieșire unidimensional

Orez. 9.29. Algoritm și procedură de intrare-ieșire a unui tablou unidimensional

I/O matrice 2D

Algoritmul și procedura pentru intrarea și ieșirea unui tablou bidimensional sunt prezentate în Fig. 5.30.

Descrierea acestei proceduri:

Sub Massiv() – numele procedurii

Declarația variabilelor care sunt utilizate în această procedură:

Dim Mas (5, 5) As Integer - declarat o matrice bidimensională cu 5 coloane și cinci rânduri, tipul numerelor este numere întregi.

Dim s As String – a declarat o variabilă de lucru pentru ieșirea finală a datelor din matrice în caseta de dialog. As String – tip de date din variabila de stocare

Următorul i – sfârșitul operației de atribuire a variabilelor

Introducerea elementelor de matrice în memoria computerului:

Pentru i = 1 La 5 – intrarea se efectuează de la primul element al primei linii, apoi de la al doilea etc.

Pentru j = 1 La 5 până la sfârșitul primei linii, apoi de la primul element al celei de-a doua linii etc.

Mas(i,j) = InputBox(i,j) – operator pentru introducerea elementelor matricei în memoria computerului

Orez. 9.30. Algoritm și procedură de intrare-ieșire a unui tablou bidimensional

Algoritmi de ordonare a matricei

Ca exemplu, oferim un algoritm și o procedură pentru sortarea unei matrice unidimensionale folosind metoda „bubble”.

Elementele de ieșire ale matricei introduse din memoria computerului:

Pentru i = 1 până la 5 – ieșirea se realizează în același mod ca și intrarea

s = s & Mas (i,j) & “ ; ”

s = s & Chr (13) – line feed (ieșire nu într-o singură linie, ci în mai multe, ca în matricea de intrare)

Următorul i – sfârșitul operatorului For….Next

MsgBox s – scoateți matricea introdusă anterior în caseta de dialog

End Sub – sfârșitul procedurii.

Această lecție va acoperi lucrul cu o buclă. Pentruîn VBA. Va fi demonstrat și un exemplu de lucru cu bucla For; un exemplu de creare a formulelor în Excel folosind macrocomenzi.

Ciclu Pentru funcționează pe principiul unui contor. Pentru utilizat în cazurile în care este necesară repetarea anumitor acțiuni de un număr prestabilit de ori. De exemplu, un ciclu Pentru folosit adesea la citirea matricelor.

Ciclu Pentru are următoarea sintaxă:
Pentru tejghea = începutul ciclului La sfârşitul ciclului [Etapa Etapa]
grup de operatori, echipe etc.
Ieșire pentru
Următorul tejghea

  • "tejghea" - o variabilă care se modifică la cea specificată "Etapa". Dacă pasul nu este specificat, atunci implicit este unul.
  • "început de ciclu", "sfârşitul ciclului" - numere sau variabile care indică limita inferioară a contorului și limita superioară. Ciclul se oprește când "contor" >"sfârşitul ciclului" ( sau, dacă ciclul este inversat, adică în pași de -1, apoi "tejghea"< "sfârşitul ciclului").
  • Ieșire pentru – comanda pentru a forța oprirea ciclului. Este folosit în cazurile în care a avut loc un eveniment în urma căruia este necesară oprirea execuției comenzilor în buclă sau pentru a preveni apariția unei erori.

Să ne uităm la câteva exemple de utilizare a unei bucle Pentru. În viitor, vom întâlni acest ciclu destul de des.

Exemplul 1
Având în vedere două coloane C și E pline cu numere:

Trebuie să adăugați numerele din coloana C cu numerele din coloana E, după cum urmează:
C2+E21, C3+E20, ..., C21+E2. Afișați rezultatul în coloana D sub forma unei formule, de ex. Conținutul celulei rezultat ar trebui să fie „=C2+E21”.

Codul macro arată astfel (citiți unde să scrieți codul):

Sub Loop_For()
„o constantă care indică limita buclei, adică la ce valoare ar trebui să ruleze bucla
Const n = 21
Pentru i=2 La n
„creați un șir de formule și salvați-l într-o celulă
Celule (i, 4) = "=C" & CStr(i) & „+E” & CStr((n - i) + 2)
„continuare la executarea în buclă
Următorul i
" restul codului programului
End Sub

Să analizăm codul scris:

  • Const n = 21 - descrierea constantei n cu valoarea 21, i.e. numărul de linii prin care trebuie să parcurgă bucla Pentru;
  • Pentru i=2 La n - i este un numărător care se va schimba cu 1 la fiecare trecere a buclei. Contorul incepe la 2 si se termina cand i>n;
  • Celulele (i, 4) - celulă alocat foaia, i este numărul rândului, 4 este numărul coloanei în care este afișat rezultatul. Rețineți că contorul nostru i indică numărul de rând al foii Excel;
  • Apoi eu- operator pentru a închide bucla și pentru a muta indicatorul la Pentru. Totul dintre ele PentruȘi Următorul executat în buclă;
  • CStr- funcție care convertește un număr în text.

Atribuim celulei o formulă creată după cum urmează „=C” & CStr(i) & „+E” & CStr((n - i) + 2). Semnul & este „lipirea” caracterelor și șirurilor. Ca rezultat, obținem formula „=Сn+E((n - i) + 2)” unde n = 21, i este contorul.
Infricosator? Se pare doar :)

Toate. După executarea macro-ului, vom obține următoarea coloană (evidențiată), iar în fiecare celulă formula:

Exemplul 2
Acum luați în considerare o buclă cu pasul specificat. După calcularea ultimei macrocomenzi, am primit trei coloane, acum trebuie să scădem D din coloana E și să afișăm formulele de scădere în coloana F. Codul macro este următorul:

Sub Loop_For_with_step()
Const n = 21
Pentru i = n La 2 Etapa -1
Celule (i, 6) = "=E" & CStr(i)&"-D"& CStr(i)
Următorul i
End Sub

În acest caz, totul este la fel, doar că ciclul acum „se execută” nu de la 2, ci de la 21 la 2 cu Pasul -1.
Rezultatul executiei va fi urmatorul:

Ciclu Pentru, în VBA, nu este singura buclă. În viitor, vom lua în considerare încă câteva opțiuni pentru bucle, de care nu puteți face fără atunci când scrieți comenzi macro în Excel.