Kattaroq indeks qiymatini kichikroq vba-ga aylantiring. VBA ko'chadan. Ko'chadan boshqa ko'chadan ichiga joylash mumkin

Loop operatorlari

VBA-da Ikkita asosiy turdagi tsikllar mavjud - hisoblagichlar (parametrik) va shartli tsikllar (iterativ).

Hisoblagich tsikllari ma'lum bir harakatlarni ma'lum bir necha marta bajarish kerak bo'lganda ishlatiladi.

Shartli ko'chadanlar ma'lum bir shart bajarilguncha dasturdagi ba'zi harakatlar takrorlanishi kerak bo'lgan hollarda qo'llaniladi.

Parametrli ko'chadanUchun ... Keyingi

Velosiped tarkibi:

Uchun Cycle_Parameter \u003d Start_ValueKimga End_Value

[Qadam qadam]

Operatorlar

[Chiqish uchun]

Keyingi [Cycle_Parameter]

qaerda - kalit so'zVBA (dan), tsikl boshlanishini ko'rsatuvchi;

Cycle_parameter - bu tsikl hisoblagichi sifatida belgilangan o'zgaruvchi;

Initial_Value - bu tsikl parametrining boshlang'ich qiymatini belgilaydigan raqam;

To - bu kalit so'zVBA (oldin) ajratish

Start_value va End_Value;

End_Value - bu loop parametrining qiymatini belgilaydigan raqam,

Bu erda tsikl tugaydi;

Qadam - bu kalit so'zVBA (qadam) uchun ishlatilgan

Loop qadam topshiriqlari, ixtiyoriy;

Qadam - bu tsiklning qadamini belgilaydigan raqam, ya'ni. uning qiymati

Parametr qiymatini oshirish (yoki kamaytirish)

Har qadamda velosiped qiling. Bu raqam bo'lishi mumkin

Salbiy;

Chiqish uchun - tsikldan erta chiqish operatori (ixtiyoriy);

Keyingi - kalit so'zVBA (keyingi) belgilaydigan

Tsikl tugashi.

Tsiklning ishlashi:

1-qadam Dastlab, tsikl parametri aniqlanadi va ushbu o'zgaruvchining boshlang'ich va yakuniy qiymatlari hisoblab chiqiladi va saqlanadi.

2-qadam Tsikl parametriga dastlabki qiymat beriladi.

3-qadam Tsikl parametrining dastlabki qiymati yakuniy qiymat bilan taqqoslanadi.

Agar tsikl parametri yakuniy qiymatdan katta bo'lsa, dastur darhol tsikldan chiqadi va tsikldan keyin keladigan kod satriga o'tadi.

4-qadam Loop tanasi bajariladi.

5-qadam Loop tanasi bajarilgandan so'ng, keyingi parametr loop parametriga beriladi. 3-bosqichga o'ting.

Eslatma.

1. Agar kalit so'z ishlatilgan bo'lsaQadam , keyin loop parametri ushbu so'zdan keyin ko'rsatilgan raqamga mos ravishda o'zgaradi. Agar so'z bo'lsaQadam yo'q bo'lsa, unda qadam qiymati biriga teng bo'ladi.

1-misol.

I \u003d 0 dan 10 gacha bo'lgan qadamlar 2 (qiymat I 2 ga ko'payadi)

2. Uchun ... Keyingi tsikl shartga kelganda muddatidan oldin to'xtatilishi mumkin. Buning uchun tsikldagi kerakli joyga operatorni joylashtirish kerakChiqish uchun.

2-misol.

Dim S Integer sifatida

Dim j butun sifatida

S \u003d 2

J \u003d 1 dan 10 gacha

S \u003d S + j

Agar S\u003e 6 bo'lsa

Chiqish uchun (Agar qiymat bo'lsa, ko'chadan chiqingS\u003e 6)

Agar tugatish

Keyingi j

MsgBox (S)

Shartli ko'chadan (takrorlovchi)

Agar biron bir harakatni (bir nechta harakatlarni) ko'p marta bajarish kerak bo'lsa, lekin oldindan necha marta ma'lum bo'lmasa va bu qandaydir shartga bog'liq bo'lsa, unda siz old shart bilan yoki keyingi shart bilan tsikldan foydalanishingiz kerak.

VBA-da ikkita asosiy tsikl mavjudQILING ... LOOP - kalit so'z bilan kiritilgan shart bilanEsa va kalit so'z bilan kiritilgan shart bilanGacha ... Ularning ikkalasi ham oldindan shartlangan yoki keyingi shartli bo'lishi mumkin.

Sintaksis:

qayerda qil - kalit so'z (bajaring);

Esa - kalit so'z (hozircha);

Gacha - kalit so'z (shu vaqtgacha);

Loop - tsikl tugaganligini ko'rsatuvchi kalit so'z;

<условие> - mantiqiy ifoda, uning haqiqati tekshiriladi

Loop tanasining har bir bajarilishining boshida;

<тело_цикла> - operatorlarning o'zboshimchalik bilan ketma-ketligi;

Do ... Qurilayotganda o'qing: shart bajarilganda bajaring. QurilishdaDo ... uchun

Do ... Qurilishga qadar: shart bajarilmaguncha bajaring. QurilishdaDo ... qadar qadamni oshirish uchun siz maxsus operator yozishingiz kerak, chunki unda, dizayndan farqli o'laroqUchun , bu avtomatik ravishda amalga oshirilmaydi.

Kalit so'zdan keyin yozilgan shartGacha , har bir takrorlash oxirida (tsikl tanasi bajarilgandan keyin) tekshiriladi. Shuni esda tutingki, u loopda bo'lgani kabi to'liq ishlamaydiEsa ... Agar shart to'g'ri bo'lsa (To'g'ri ), keyin tsikl tugaydi. Agar shart bajarilmasa (noto'g'ri bo'lsa -Yolg'on ), keyin yana tsikl tanasi bajariladi.

1-misol.

Muammoni shakllantirish. Odatiy tartib yordamida cheklangan qatorlarning yig'indisini hisoblang.

Vazifani bajarish texnologiyasi:

1. Dastlabki ma'lumotlar:i  Z

Natija: S  R.

2. Loyihaning standart modulida quyidagi maxsus protsedurani oldindan shartli tsikl yordamida yozingQachonki:

Sub summa ()

Dim S Integer sifatida

Dim i Integer sifatida

S \u003d 0

i \u003d 1

Do while i<= 10

S \u003d S + i ^ 2

i \u003d i + 1

Loop

MsgBox (S)

Tugatish Sub

3. Loyihaning standart modulida oldingi shartga ega tsikl yordamida quyidagi maxsus protsedurani kiritingGacha:

Sub summa ()

Dim S Integer sifatida

Dim i Integer sifatida

S \u003d 0

i \u003d 1

I\u003e 10 gacha bajaring

S \u003d S + i ^ 2

i \u003d i + 1

Loop

MsgBox (S)

Tugatish Sub

4 Loyihaning standart modulida quyidagi shartli protsedurani postkonditsionli tsikl yordamida yozingQachonki:

Sub summa ()

Dim S Integer sifatida

Dim i Integer sifatida

S \u003d 0

i \u003d 1

S \u003d S + i ^ 2

i \u003d i + 1

Loop while i<= 10

MsgBox (S)

Tugatish Sub

5 Loyihaning standart modulida postkonditsionli tsikl yordamida quyidagi maxsus protsedurani kiritingGacha:

Sub summa ()

Dim S Integer sifatida

Dim i Integer sifatida

S \u003d 0

i \u003d 1

S \u003d S + i ^ 2

i \u003d i + 1

I\u003e 10 gacha bo'lgan davr

MsgBox (S)

Tugatish Sub

VBA. Tsikllarni tashkil etish.

Loop операторlari harakat yoki harakatlar guruhini bajarilishini belgilangan sonini takrorlash uchun ishlatiladi. Takrorlashlar soni (tsiklning takrorlanishi) oldindan belgilanishi yoki hisoblanishi mumkin.

VBA ikkita turdagi konstruktsiyalarni qo'llab-quvvatlaydi:

  1. Belgilangan sonli takrorlashlar ( qarshi tsikllar).
  2. Noma'lum takroriy takrorlashlar ( shartli ko'chadan).

Barcha turdagi tsikllar uchun kontseptsiya qo'llaniladihalqa tanasi bu tsiklning boshlanish va tugatish bayonotlari orasida joylashgan bayonotlar blokini belgilaydi. Loop tanasi operatorlari bajarilishining har bir takrorlanishi deyiladitakrorlash.

Ruxsat etilgan tsikllar

VBA sobit tsiklni tashkil qilish uchun ikkita boshqaruv tuzilmasini taqdim etadi: For… Keyingi (hisoblash tsikli) va Every For… Keyingi (sanab o'tilgan tsikl).

Uchun ... Keyingi bayonot u belgilangan takroriy sonlarni bajaradigan odatiy qarshi tsikl. Uchun ... Keyingi sintaksis iborasi:

Uchun<счетчик> = <начЗначение> Keyin<конЗначение>

<блок операторов>

Keyingi [<счетчик>]

For ... Next iborasidan foydalanish misoli.

Listing 1. For ... Keyingi bayonot

‘CHALLENGE: foydalanuvchidan ikkita raqam qabul qiladigan dastur yozing.

‘Ushbu ikkita raqam tomonidan berilgan diapazondagi barcha raqamlarni qo'shadi va keyin

Olingan miqdorni aks ettiradi.

Sub sample7 ()

Dim i As Integer 'tsikli hisoblagichi

Dim sStart 'boshlang'ich hisoblagich qiymati

Dim sEnd 'hisoblagichining so'nggi qiymati

Dim sSum As Long 'natijasida hosil bo'lgan summa

sStart \u003d InputBox ("Birinchi raqamni kiriting:")

sEnd \u003d InputBox ("Ikkinchi raqamni kiriting:")

sSum \u003d 0

I \u003d CInt (sStart) dan CInt (sEnd) uchun

sSum \u003d sSum + i

Keyingi i

MsgBox "" & sStart & "dan" & sEnd & "gacha bo'lgan raqamlar yig'indisi:" & sSum

Tugatish Sub

Har bir ... Keyingi ko'chadan bayonot uchun ob'ekt turi operatorlari toifasiga kiradi, ya'ni. birinchi navbatda to'plamlarga tegishlimassivlar bilan bir qatorda ob'ektlar ... Loop tanasi qatordagi yoki to'plamdagi elementlar soniga mos keladigan sobit sonda bajariladi. Har bir ... Keyingi bayonot formati uchun:

Har biriga<элемент> Yilda<группа> <блок операторов> Keyingi [<элемент>]

Shartli ko'chadan (aniqlanmagan ko'chadan)

Shartli tsikllar takrorlanadigan harakatlar faqat ma'lum sharoitlarda bajarilishi zarur bo'lganda qo'llaniladi. Takrorlashlar soni aniqlanmagan va umumiy holatda nolga teng bo'lishi mumkin (xususan, old sharti bo'lgan ko'chadanlar uchun). VBA dasturchilarga shartli ko'chadanlar uchun bir nechta boshqaruv tuzilmalarini taqdim etadi:

  • Tekshirilgan shartning turi va ushbu tekshiruvning bajarilish vaqti bilan farq qiluvchi Do..Loop ko'chadan to'rt turi.
  • Uzluksiz While ... Wend tsikli.

Do while ... Loop - odatiy oldingi shart... Vaziyat loop tanasi bajarilishidan oldin tekshiriladi. Tsikl o'z ishini davom ettiradi<условие> bajariladi (ya'ni To'g'ri). Tekshirish boshida amalga oshirilganligi sababli, tsiklning tanasi hech qachon bajarilmasligi mumkin. Do while ... Loop formati:

Vaqtni bajaring<условие>

<блок операторов>

Loop

Listing 2. Do while ... ko'chadan

‘Maqsad: foydalanuvchi ma'lumotlarini talab qiladigan dastur yozing

'Raqamlarning o'zboshimchalik bilan ketma-ketligi. Kirish tugatilishi kerak

'Faqat kiritilgan toq sonlar yig'indisi 100 dan oshgandan keyingina.

Sub sample8 ()

Dim OddSum Integer sifatida "toq sonlar yig'indisi

Dim OddStr As String 'qatori g'alati raqamlar bilan

Kirish raqamlarini qabul qilish uchun Dim Num '

OddStr \u003d "" 'chiqish satrini boshlash

OddSum \u003d 0 'OddSum summasini boshlash

OddSum paytida qiling< 100 ‘начало цикла

Num \u003d InputBox ("Raqamni kiriting:")

Agar (Num Mod 2)<> 0 Keyin 'tenglikni tekshiring

OddSum \u003d OddSum + Num 'toq sonlar yig'indisi

OddStr \u003d OddStr & Num & ””

Agar tugatish

Loop

'Toq raqamlar bilan chiqish chizig'i

MsgBox so'rovi: \u003d "G'alati raqamlar:" & OddStr

Tugatish Sub

Do ... Loop while bayonoti tashkil etish uchun mo'ljallangankeyingi shart bilan pastadir... Vaziyat pastadir tanasi kamida bir marta bajarilgandan so'ng tekshiriladi. Tsikl o'z ishini shu vaqtgacha davom ettiradi<условие> haqiqat bo'lib qolmoqda. Do ... Loop while formati:

Qil<блок операторов> Davr<условие>

Listing 3. Postkonditsion bilan ilmoq

‘Maqsad:" Raqamni taxmin qiling "o'yini uchun dastur yarating. Dastur tasodifiy bo'lishi kerak

‘1 dan 1000 gacha bo'lgan raqamni yaratish uchun foydalanuvchi kerak

‘Bu raqamni taxmin qiling. Dastur har bir kiritilgan raqam uchun ko'rsatmani namoyish etadi

' "ko'proq yoki kamroq".

Sub sample8 ()

Randomize Timer 'tasodifiy sonlar generatorini ishga tushiradi

Dim msg As String 'xabarlar qatori

Dim SecretNumber as long, UserNumber as variant

Boshlash: SecretNumber \u003d Round (Rnd * 1000) ‘kompyuter tomonidan ishlab chiqarilgan raqam

UserNumber \u003d Bo'sh ‘foydalanuvchi tomonidan kiritilgan raqam

‘O‘yin o‘yinini bajaring

Haqiqiy holatni tanlang

Case IsEmpty (UserNumber): msg \u003d "Iltimos, raqamni kiriting"

Case UserNumber\u003e SecretNumber: msg \u003d "Juda ko'p!"

Case UserNumber< SecretNumber: msg = “Слишком мало!”

Tugatish-ni tanlang

UserNumber \u003d InputBox (so'rov: \u003d msg, Sarlavha: \u003d "Raqamni taxmin qiling")

UserNumber paytida tsikl<> SecretNumber

‘Tekshiring

Agar MsgBox ("Yana o'ynaysizmi?", VbYesNo + vbQuestion, "Siz taxmin qildingiz!") \u003d VbYes Keyin

Boshlashga boring

Agar tugatish

Tugatish Sub

Do ... Loop va Do ... Loop циклlarigacha qiling ilgari ko'rib chiqilgan shartli ko'chadanlarning inversiyalari. Umuman olganda, ular xuddi shu tarzda ishlaydi, faqat shart noto'g'ri bo'lganida (ya'ni, tsiklning tanasi) bajariladi.<условие>\u003d Yolg'on). To Do ... Loop formati:

Bunga qadar qiling<условие> <блок операторов> Loop

Do ... Loop formati:

<блок операторов>

To loop<условие>

Amaliy vazifa: Teskari tsikl operatorlari yordamida 10 va 11-ro'yxatdagi dasturlarni qayta yozing.

Shu bilan birga ... Vend Loop shartli ko'chadanlarga ham tegishli. Ushbu bayon Do Do ... Loop tuzilishiga to'liq mos keladi. While ... Wend loop formati:

Esa<условие>

<блок операторов>

Vend

Ushbu operatorning o'ziga xos xususiyati - bu tsikl tanasining majburiy ravishda tugatilishi (uzilishi) mumkin emasligi (Exit Do operatori While ... Wend tsiklida ishlamaydi).

Interrupt tsikli

Exit operatori takrorlashni erta tugatish va tsikldan chiqish uchun ishlatiladi. Ushbu ibora While ... Wenddan tashqari har qanday tsikl tarkibida ishlaydi. Tsiklni sindirish uchun Exit-dan foydalanishning umumiy sintaksisi quyidagicha:

<начало_цикла>

[<блок операторов1>]

Chiqish (uchun | Do)

[<блок операторов2>]

<конец_цикла>

Exit operatori bajarilgach, tsikl uzilib, boshqaruv operatordan keyin operatorga beriladi<конец_цикла>... Bir nechta Exit bayonotlari loop tanasida mavjud bo'lishi mumkin.

Listing 4. Loopdan majburan chiqib ketish

Sub sample9 ()

I \u003d 1 dan 10000000 gacha

Agar i \u003d 10 bo'lsa, u holda hisoblagich 10 ga etganida tsikldan chiqing

Keyingi

VBA dasturi bir xil harakatlarni ketma-ket bir necha marta bajarishi kerak bo'lgan holatlar mavjud (ya'ni bitta kod blokini bir necha marta takrorlash). Buni VBA ko'chadan foydalanib amalga oshirish mumkin.

Visual Basic-da tsikl operatori uchun

Loop operatorining tuzilishi Uchun Visual Basic-da ikkita shaklning birida: tsikl shaklida tashkil qilinishi mumkin Uchun ... Keyingi yoki pastadir sifatida Har biriga.

"Keyingi ... uchun" tsikli

Velosiped Uchun ... Keyingi berilgan oraliqdan qiymatlarni ketma-ket qabul qiladigan o'zgaruvchidan foydalanadi. O'zgaruvchan qiymatining har bir o'zgarishi bilan tsikl tanasida joylashgan harakatlar bajariladi. Buni oddiy misoldan tushunish oson:

I \u003d 1 dan 10 gacha Total \u003d Total + iArray (i) Keyingi i

Ushbu oddiy tsiklda Uchun ... Keyingi o'zgaruvchan ishlatilgan men, ketma-ket ravishda 1, 2, 3,… 10 qiymatlarini qabul qiladi va ushbu qiymatlarning har biri uchun tsikl ichidagi VBA kodi bajariladi. Shunday qilib, ushbu tsikl massiv elementlarini qo'shadi iArray o'zgaruvchida Jami.

Yuqoridagi misolda o'zgaruvchini oshirish uchun tsikl o'sishi ko'rsatilmagan men 1 dan 10 gacha, sukut bo'yicha o'sish hisoblanadi 1 ... Biroq, ba'zi hollarda, tsikl uchun turli xil o'sish qiymatlaridan foydalanish kerak. Bu kalit so'z yordamida amalga oshirilishi mumkin Qadamquyidagi oddiy misolda ko'rsatilgandek.

D \u003d 0 dan 10 gacha bo'lgan qadamlar uchun 0.1 dTotal \u003d dTotal + d Keyingi d

Yuqoridagi misolda o'sish o'rnatildi 0.1 , keyin o'zgaruvchi jami tsiklning har bir takrorlanishi uchun 0,0, 0,1, 0,2, 0,3,… 9,9, 10,0 qiymatlari qabul qilinadi.

VBA-dagi pastadir qadamini aniqlash uchun manfiy qiymatdan foydalanishingiz mumkin, masalan:

I \u003d 10 dan 1 gacha bo'lgan qadam -1 iArray (i) \u003d i Keyingi i

Mana bu o'sish -1 , shuning uchun o'zgaruvchan men tsiklning har bir takrorlanishi bilan 10, 9, 8, ... 1 qiymatlari olinadi.

"Har bir kishi uchun" davri

Velosiped Har biriga tsiklga o'xshash Uchun ... Keyingi, lekin hisoblagich o'zgaruvchisi uchun ketma-ketlik qiymatlari ketma-ketligini takrorlash o'rniga Har biriga ko'rsatilgan ob'ektlar guruhidan har bir ob'ekt uchun harakatlar majmuini amalga oshiradi. Quyidagi misolda pastadir yordamida Har biriga joriy Excel ish daftaridagi barcha varaqlarni sanab chiqadi:

Dim wSheet ish jadvalidagi har bir varaq uchun MsgBox "Sheet Found:" & wSheet.Name Keyingi wSheet.

"Chiqish" tugmachasini to'xtatish to'g'risidagi bayonot

Operator Chiqish uchun tsiklni to'xtatish uchun ishlatiladi. Kodda ushbu bayonot bilan uchrashishi bilanoq, dastur tsiklning bajarilishini tugatadi va shu tsikldan so'ng darhol koddagi bayonotlarning bajarilishiga o'tadi. Bu, masalan, massivdagi ma'lum bir qiymatni izlash uchun ishlatilishi mumkin. Buning uchun tsikl yordamida massivning har bir elementi skanerdan o'tkaziladi. Kerakli element topilishi bilanoq, qolgan qismini ko'rib chiqishning hojati yo'q - tsikl uzilib qoladi.

Operator dasturi Chiqish uchun quyidagi misolda namoyish etilgan. Bu erda tsikl 100 dan ortiq qator yozuvlarini takrorlaydi va har birini o'zgaruvchining qiymati bilan taqqoslaydi dVal... Agar moslik topilsa, u holda tsikl tugaydi:

Uchun i \u003d 1 dan 100 gacha Agar dValues \u200b\u200b(i) \u003d dVal bo'lsa, u holda IndexVal \u003d i End uchun End bo'lsa Keyingi i

Visual Basic-da Do While Loop

Velosiped Vaqtni bajaring belgilangan shart bajarilgan ekan, kod blokini bajaradi. Quyida protsedura namunasi keltirilgan Sub, unda loop yordamida Vaqtni bajaring 1000 dan oshmaydigan Fibonachchi raqamlari ketma-ket ko'rsatiladi:

"Sub-protsedura Fibonacci raqamlarini 1000 Sub Fibonacci () Dim i As Integer" hisoblagichida "Dim iFib As Integer" ketma-ketligidagi elementning holatini ko'rsatish uchun chiqaradi "Dim iFib_Next As Integer" ketma-ketligining joriy qiymatini saqlaydi "Dim iStep" Integer "ketma-ketligining keyingi qiymatini saqlaydi" Keyingi o'sish hajmi "i va iFib_Next o'zgaruvchilarini ishga tushiradi i \u003d 1 iFib_Next \u003d 0" Do while tsikli amaldagi Fibonachchi raqamining qiymati bajarilguncha "1000 Do while iFib_Next dan oshadi< 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

Yuqoridagi misolda shart iFib_Next< 1000 tsikl boshida tekshiriladi. Shuning uchun, agar birinchi qiymat bo'lsa iFib_Next 1000 dan ortiq bo'lar edi, u holda loop hech qachon bajarilmaydi.

Loopni amalga oshirishning yana bir usuli Vaqtni bajaring - shartni tsiklning boshida emas, balki oxirida joylashtiring. Bunday holda, shart bajarilganligidan qat'i nazar, tsikl kamida bir marta bajariladi.

Bunday tsikl sxematik ravishda amalga oshiriladi Vaqtni bajaring oxirida tekshirilgan shart bilan shunday bo'ladi:

Do ... iFib_Next paytida ko'chadan< 1000

Visual Basic-da "Do Do Loop"

Velosiped Bunga qadar qiling pastadirga juda o'xshash Vaqtni bajaring: tsikl tanasidagi kodlar bloki belgilangan shart bajarilmaguncha qayta-qayta bajariladi (shartli ifoda natijasi To'g'ri). Quyidagi tartibda Sub pastadir yordamida Bunga qadar qiling ustundagi barcha kataklardan qiymatlarni oladi A ustunda bo'sh katakka duch kelguncha ishchi varaq:

IRow \u003d 1 Do IsEmpty (Cells (iRow, 1)) "" Joriy katakning qiymati dCellValues \u200b\u200bdCellValues \u200b\u200b(iRow) \u003d hujayralar (iRow, 1) massivida saqlanadi .Value iRow \u003d iRow + 1 Loop

Yuqoridagi misolda shart IsEmpty (Hujayralar (iRow, 1)) qurilish boshida Bunga qadar qiling, shuning uchun birinchi olingan bo'shliq bo'sh bo'lmasa, ko'chadan kamida bir marta bajariladi.

Biroq, loop misollarida ko'rsatilgandek Vaqtni bajaring, ba'zi holatlarda, shartli ifodaning dastlabki natijasidan qat'i nazar, ko'chadan kamida bir marta bajarilishi kerak. Bunday holda, shartli ifoda tsiklning oxiriga quyidagicha joylashtirilishi kerak:

Do ... IsEmpty qadar tsikl (Hujayralar (iRow, 1))

Operator sintaksisi:

UchunHisoblagich= Boshlang Tonihoya[QadamQadam]

Blok_Operatorlari

KeyingiHisoblagich

Bu erda ko'rsatilgan:

Uchunuchun (kerakli kalit so'z VB);

Kimgaoldin (kerakli kalit so'z VB);

Blok_Operatorlari- bir yoki bir nechta operator chaqirildi tsikl tanasi;

Hisoblagich -bajarilgan tsikllar sonini hisoblaydigan butun son o'zgaruvchisi;

Boshlash, tugatish -hisoblagichning boshlang'ich va oxirgi qiymatlari;

Qadamqadam (VB kalit so'zi);

Qadam -hisoblagichni o'zgartirish bosqichi; salbiy bo'lishi mumkin; parametr ixtiyoriy, chunki agar qadam 1 bo'lsa, siz qadam qo'yishingiz mumkin Qadampastki;

Keyingi - keyingi (majburiy kalit so'z VB, tsikl bayonoti oxiri).

Hisoblagich qiymati (Boshlash, tugatish)bo'lishi mumkin raqamli doimiylar yoki butun yoki haqiqiy turdagi o'zgaruvchilar, salbiy yoki musbat sonlar bo'lishi mumkin. Loop tanasi kamida bir marta bajarilishi uchun bo'lishi kerak Boshlash, tugatish,agar a Qadam\u003e 0 va Boshlash, tugatish,agar a Qadam< 0. Bu aniqlangandan so'ng Hisoblagich>Nihoya (agar a Boshlang< Конец), tsikl tugaydi. Agar a Boshlash \u003dNihoya,tsikl bir marta bajariladi;

9.1-misol .Funktsiyalarni hisoblashY = 2 – 1.5 Sinx X oralig'ida 0,2 qadam bilan o'zgartirilganda.

Y ni hisoblash va X argumentini va Y funktsiyasini chiqarish dasturining qismi:

X \u003d 0 dan 2.4 gacha bo'lgan qadam uchun 0.2

Y \u003d 2 - 1,5 * gunoh (X)

Ushbu tsikl qanday ishlashini tushunish uchun biz shunga o'xshash tsiklning dasturini taqdim etamiz operatorGoTo, teglar, operatorAgarKeyin.

M1: X \u003d X + 0.2

Agar X<= 2.4 Then

Y \u003d 2 - 1,5 * gunoh (X)

Keling, ushbu dastur qanday ishlashini tahlil qilaylik. Birinchi hisoblash Ynonstandard bo'lib, xuddi tsikldan tushgandek. Tsikl boshqaruvni GoToM1-dan M1 yorlig'iga birinchi o'tkazgandan so'ng boshlanadi. M1 deb belgilangan satrda X argumenti 0,2 pog'onaga ko'paytiriladi va yangi X ning oxirgi qiymati 2.4 dan oshmasligi darhol tekshiriladi. Agar u oshmasa, u holda Y ning hisoblanishi ushbu yangi X bilan takrorlanadi. Keyin yana GoToM1 operatori bajariladi - boshqaruvni M1 yorlig'i bilan chiziqqa o'tkazish. Y ni hisoblashning ushbu takrorlashlari (tsikllari) X 2,4 dan oshishi bilanoq tugaydi.

Endi If bilan dastur For ... Next tsikli bilan taqqoslanadi.

X \u003d 0 dan 2.4 gacha bo'lgan qadam uchun 0.2

ikki qatorni almashtiradi

M1: X \u003d X + 0.2

Agar X<= 2.4 Then

Bu For tsiklida bajarilgan oxirgi ikki satr kod, ammo biz buni ko'rmayapmiz. Biz ularni For ... bilan kodladik GoTo M1 kod satri Keyingi X so'zi bilan kodlangan (so'zma-so'z: keyingi X). Natijada ixcham dizayn.

For ... Next tsiklidan foydalanganda siz turli xil masalalarni echishda loop hisoblagichidan foydalanishni o'rganishingiz kerak. Muammoni hal qilish uchun hisoblagichdan qanday foydalanishingiz mumkinligini aniqlash uchun sizga kerak muammoning shakllanishini tahlil qilish, masalaning ba'zi parametrlarini o'zgartirish naqshlarini topish.

9.2-misol . Qator elementlari yig'indisini aniqlash:.

Dastur fragmenti:

S \u003d 0 'S - qator yig'indisi

I \u003d 1 dan 16 'gacha bo'lgan hisoblagich uchun i kasrning maxrajidir

S \u003d S + 1 / i 'yig'indisi

Chop etish "S \u003d"; S 'S yig'indisini shaklga chiqaradi

Hisoblagichning har bir qiymati uchun 1 / i ifodasi ketma-ket ravishda 1 dan boshlab qator elementlarini hosil qiladi.

9.3-misol . Bir qator elementlarning yig'indisini hisoblash
.

Dastur fragmenti:

S \u003d 0 'S - qator yig'indisi

I \u003d 1 dan 18 'gacha bo'lgan hisoblagich uchun i - numerator

S \u003d S + i / (i + 1) 'maxraj numeratordan 1 ga ko'p

Chop etish "S \u003d"; S 'S yig'indisini shaklga chiqaradi

9.4-misol . Yig'inni hisoblash: 5 + 8 + 11 + ... + 32 + 35

Dastur fragmenti:

S \u003d 0 'S - qator yig'indisi

I \u003d 5 dan 35 gacha bo'lgan 3-qadam uchun arifmetik _ olinadi

maxraj 3 bilan progresiya

Chop etish "S \u003d"; S

9.5-misol. Berilgan x uchun summani hisoblash:

Muammoni tahlil qilish shuni ko'rsatadiki, X darajadagi daraja 1 dan 10 gacha o'zgarib turadi, bu holda Xdagi koeffitsientdagi raqam 1 darajadan kattaroq, ajratuvchi 2 ga teng bo'ladi. Daraja qiymati hisoblagich yordamida hosil bo'ladi. Keyin siz quyidagi dasturni (fragment) tuzishingiz mumkin:

S \u003d 1 'S - qator yig'indisi

I \u003d 1 dan 10 'gacha, hisoblagich i sifatida, daraja X da o'zgaradi

S \u003d S + (-1) ^ i * (i + 1) * x ^ i / (i + 2)

Chop etish "S \u003d"; S

VelosipedlarUchunKeyingi ichida ishlatilgankirish, chiqish vamassivlarni qayta ishlash .

Misol 9.6. B massivi elementlarining qiymatlarini kiritish va chiqarish (N).

Dastur fragmenti:

'N, _ o'zgaruvchiga qiymat berishni o'tkazib yuboring

txtN matn maydoniga shaklga kiritilgan:

B (i) \u003d InputBox ("B elementini kiriting (" & i & ")", _

"Kirish massivi (" & N & ")")

Chop etish ""; B (i);

Funktsiya Kirish qutisi() yopish tugmasi, ko'rsatilgan xabar, kirish maydoni, tugmachalari bo'lgan dialog oynasini aks ettiradi OK,Bekor qilish,berilgan sarlavha (yoki unsiz). Agar 12 raqami - N massivining kattaligi kiritilgan bo'lsa, unda bizning misolimizda birinchi paydo bo'lganda, bu oyna quyidagicha ko'rinadi:

Ko'rib turganingizdek, xabar B bandini kiriting (1)matn maydoniga 1-bandning qiymatini kiritishingizni so'raydi. Ushbu oyna 12 marta paydo bo'ladi, chunki massivda 12 ta element mavjud. Bu shaklning sarlavhasidan kelib chiqadi. Taklifnomadagi B (i) bandining ko'rsatkichi 1 dan 12 gacha o'zgarib turadi.

Agar sizga formada faqat B (N) massivi elementlarining qiymatlarini ko'rsatish kerak bo'lsa, u holda tsikl tanasi bitta operatordan iborat bo'ladi:

Massiv elementlarini ularda qandaydir harakatlarni bajarish uchun ko'rish For ... Next sikl operatori yordamida ham sodir bo'ladi.

Keling, beraylik bir o'lchovli massivlarni qayta ishlash misollari.

9.7-misol . B massividagi maksimal elementni aniqlash (M).

Dastlabki ma'lumotlarni kiritish va natijalarni chiqarishni hisobga olmaganda, biz algoritmni qisqacha tavsiflaymiz:

    Keling, massivning birinchi elementi qiymatini kiritadigan Vmax o'zgaruvchini e'lon qilamiz va unga 1 - massivning birinchi elementi indeksini tayinlaydigan o'zgaruvchini kiritamiz.

    Lo ... da For ... Next operatoridan foydalanib biz massivning 2-qismidan boshlab barcha elementlarini ko'rib chiqamiz. Agar ... Keyin operatoridan foydalanib, ularning qiymatlarini Bmax o'zgaruvchisida saqlanadigan qiymat bilan taqqoslaymiz.

    Agar massiv elementining qiymati Bmaxdan katta ekanligi aniqlansa, u holda Bmax ga ushbu elementning qiymati beriladi va Imax qiymati bu massiv elementining indeksidir.

Tsikl tugagandan so'ng Bmax o'zgaruvchisi maksimal elementning qiymatini, Imax esa uning indeksini (raqamini) ko'rsatadi.

Algoritmning ushbu qismi uchun dastur.

Bmax \u003d B (1): Imax \u003d 1

Agar B (i)\u003e Bmax bo'lsa Bmax \u003d B (i): Imax \u003d i

Misol 9.8. Massivning ijobiy elementlari yig'indisi, ko'paytmasi va sonini aniqlashD.(M).

O'zgaruvchilar:S, P, K - mos ravishda yig'indisi, ko'paytmasi va musbat elementlar soni.

Algoritmbunday ta'rif:

    Biz S va K o'zgaruvchilarga nolni beramiz, biz o'zgarmaydigan P ga 1. Biz, qoida tariqasida, har doim yig'indisi to'plangan o'zgaruvchilar, bu erda u S va k, tsikl oldidan nolga o'rnatiladi va mahsulot hisoblangan o'zgaruvchilarga 1 beriladi.

    For ... Next tsikli yordamida biz massivning barcha elementlarini takrorlaymiz va ularning ijobiy (D (i)\u003e 0) ekanligini tekshiramiz.

    Agar element ijobiy bo'lsa, unda biz uning qiymatini S yig'indisining qiymatiga qo'shamiz va yangi summani bir xil o'zgaruvchida saqlaymiz. Biz P o'zgaruvchini elementning musbat qiymatiga ko'paytiramiz va uni P o'zgaruvchida ham saqlaymiz. Va o'zgaruvchiga 1 qo'shing va yangi qiymatni bir xil o'zgaruvchiga saqlang

Dasturalgoritmning ushbu qismi quyidagicha ko'rinadi:

S \u003d 0: P \u003d 1: K \u003d 0

Agar D (i)\u003e 0 bo'lsa

S \u003d S + D (i) 'shu tarzda yig'iladi _

massiv D (i) elementlarining ijobiy qiymatlari

P \u003d P * D (i) 'ijobiy mahsulotning ta'rifi

Array elementlari

K \u003d K + 1 'bu operator COUNTER deb nomlangan, bu erda

'Massivdagi ijobiy elementlar sonini aniqlaydi

Misol 9.9. Toq massiv elementlari yig'indisi, ko'paytmasi, soni va o'rtacha qiymatini aniqlashD.(M).

Mana shunday ta'rif dasturining bir qismi.

S \u003d 0: P \u003d 1: K \u003d 0

Agar D (i) Mod 2 bo'lsa<> 0 Keyin

Ssr \u003d S / k 'toq elementlarning o'rtacha qiymatini hisoblash

Ushbu kod parchasini 9.8-misoldagi kod bilan taqqoslang. Ushbu dastur avvalgisini deyarli to'liq takrorlaydi. Faqat If operatoridagi shart o'zgargan. D (i) holati 2-modda<> 0 biz D (i) massivining 2 ga bo'linmaydigan elementlarini, ya'ni toq elementlarni qidirayotganimizni anglatadi. Agar D (i) Mod 2 \u003d 0 shartini tekshirsak, u holda massivning juft elementlarini tanlaymiz.

Ma'lumki, bo'linish Tartibninatijada bo'linishning qolgan qismi butun sonlarga olib keladi. Masalan, d \u003d 34Mod4 operatorini bajargandan so'ng, d o'zgaruvchisi 2 ga teng bo'ladi. Shuning uchun 4 ga ko'paytirilgan massiv elementlarini tanlash uchun D (i) Mod 4 \u003d 0 sharti tekshirilishi kerak.Boshqa sonlarning ko'paytmasi bo'lgan elementlarni qidirsak, shart o'xshash bo'ladi. 4 o'rniga, bu boshqa raqamlar yoziladi.

Misol 9.10. Massiv elementlarini yozishR(N), ko'paytma 5, boshqa qatorga va yangi massivni shaklga chiqaradi.

Boshqa bir qator, masalan, R5 (N) bilan belgilanadi. Ushbu yangi qatorning o'lchami asl nusxasi bilan bir xil bo'lishi kerak, chunki o'ta og'ir vaziyatda barcha elementlar 5 ga ko'paytirilishi mumkin.

Vazifa algoritmi:

    Hisoblagichni tiklash k. For ... Next sikl operatoridan foydalanib, biz R (N) massivining barcha elementlarini aylanib chiqamiz.

    Biz har bir elementni 5-sonli ko'payishini tekshiramiz, agar ... Keyin operatori yordamida va massiv elementini Modga bo'lsak.

    Agar element 5 ga ko'paytma bo'lsa, u holda k \u003d k + 1 turidagi hisoblagich yordamida R5 (N) massivining indekslarini 1 dan boshlab hosil qiladi va uni boshqa qatorga yozing - R5 (N).

    Agar k nolga teng bo'lsa, biz R5 () massivini shaklga chiqaramiz.

    Agar k nolga teng bo'lsa, biz quyidagilarni chiqaramiz: "5 ga bo'linadigan elementlar yo'q".

Dastur fragmenti:

Agar R (i) Mod 5 Keyin k \u003d k + 1: R5 (k) \u003d R (i)

Agar k<> 0 Keyin

"5 ga bo'linadigan narsalar yo'q" ni chop eting

Ko'chadanlar boshqa ko'chadan ichida joylashtirilishi mumkin.

Keling, ishni namoyish etamiz ichki ko'chadan ... Quyida dastur i, j va k tsikli hisoblagichlari qiymatlarini chiqarishni tashkil qiladi. I, j, k chiqishidan ichki ko'chadan qanday bajarilishi aniq bo'ladi.

Maxsus Sub frmCycle_DblClick ()

ScaleMode \u003d 4 'o'lchov birligi - belgilar

I \u003d 1 dan 3 'gacha tashqi tsikl uchun

Chop etish "i \u003d"; men;

J \u003d 1 dan 4 'gacha bo'lgan 1-chi ko'chadan uchun

CurrentX \u003d TextWidth ("i \u003d 1") + 5

Chop etish "j \u003d"; j;

CurrentX \u003d TextWidth ("i \u003d 1 j \u003d 1") + 7

K \u003d 1 dan 5 'gacha bo'lgan 2-chi ko'chadan uchun

Tasvirlangan shakl (1-rasm) uchta tsiklning hisoblagichlarini chiqarish natijalarini ko'rsatadi: tashqi tsikl - hisoblagich i, birinchi joylashtirilgan tsikl - hisoblagich j va ikkinchisi, ichki tsikl - hisoblagich k. Ko'rib turganingizdek tashqi tsiklning "eng sekin" hisoblagichi(poi) va "eng tezkor" - bu ichki tsiklning hisoblagichi (tomonidank).

Dastur frmCicli shaklidagi sichqonchaning chap tugmachasini ikki marta bosgandan so'ng bajariladi.

CurrentX, CurrentY - chop etish usuli bilan ma'lumot chiqarish uchun boshlang'ich nuqtasining X, Y koordinatalarini belgilaydigan shakl xususiyatlari (1-rasmga qarang, shakl X va Y o'qlarining joylashuvi).

TextWidth () - funktsiyada ko'rsatilgan matnning kengligini ikki tirnoqli argument sifatida qaytaradigan funktsiya.

Ichki ko'chadan ikki o'lchovli massivlarni (matritsalarni) qayta ishlashda foydalaniladi. Ammo ikki o'lchovli qator elementlarini kiritish va chiqarishni hisobga olmaganda, ba'zi vazifalarda siz o'zingizni bitta tsikl bilan cheklashingiz mumkin. Matritsali dasturlashning bir nechta misollarini ko'rib chiqamiz.

9.11-misol. Matritsani kiritish va chiqarish (ikki o'lchovli massiv) butun sonlarintA(N).

Siz matritsani kiritishingiz mumkin qator va ustunlar bo'yicha ... Formada massiv elementlarining chiqishi ular kiritilgandan so'ng darhol dasturlashtirilsa, osonroq - chiziqlar bo'yicha.

Matritsaga kirish va chiqishsatrma-satr - fragment 1.

Dim M Integer, N Integer, i Integer, j In integer kabi

Dim intA () Integer sifatida 'dinamik qator e'lon qiladi

M \u003d Val (txtN.Text) 'M - satrlar soni

N \u003d Val (txtN.Text) ‘N - ustunlar soni

ReDim intA (M, N) Integer 'qatorini qayta aniqlang

I \u003d 1 uchun M 'i o'z qiymatini to'liq saqlaydi

J-dagi ichki tsikl bajarilmaydi

Chop etish ""; intA (i, j); 'Chiqish satrlar bo'yicha

Chop etish 'yangi satr boshiga o'tish

Matritsani ustunlar bo'yicha kiritish uchun j tashqi (ustunlar sonini belgilaydi), ichki tsiklni esa (qator raqamlarini o'rnatadi) o'tishingiz kerak.

Matritsaga kirish va chiqishustunlar bo'yicha fragment 2.

PrY \u003d 2500: CurrentY \u003d PrY 'PrY boshlanishning Y koordinatasini o'rnatadi

'Formadagi har bir ustunning birinchi elementini chiqaring

J \u003d 1 uchun N 'j o'z qiymatini to'liq saqlaydi

'I ustiga o'rnatilgan ko'chadan bajarilmaydi

intA (i, j) \u003d InputBox ("IntA elementini kiriting (" & i & "," & j & ")", _

"IntA matritsasi (" & M & "," & N & ")")

Chop etish yorlig'i (6 * j); intA (i, j) 'ustun bilan chiqish

Birinchi elementni ko'rsatish uchun CurrentY \u003d PrY '

‘Keyingi ustun

Ushbu ikkinchi dastur fragmenti birinchi qismdan dastlabki 5 qatorni takrorlamaydi. Tab (6 * j) funktsiyasi chiqishni boshlanishini satrda (belgilar bilan) shaklning chap chetidan boshlab belgilaydi. Bu erda PrY koordinatasi 2500 twips, ammo siz boshqa qiymatni tanlashingiz mumkin.

9.12-misol . Massiv elementlari qiymatlarini tartiblashV(N) Ko'tarilish.

Massivlarni buyurtma qilish uchun bir nechta algoritmlar mavjud. Mana ulardan biri: ichki ko'chadan foydalanishUchunKeyingi birinchisidan oldingi kunga qadar elementlarni tanlang va ularning har birini keyingi elementlar bilan taqqoslang; agar keyingi element tanlanganidan kamroq bo'lsa, biz ularni almashtiramiz.

Ushbu algoritmni amalga oshiradigan dasturning bir qismi:

I \u003d 1 uchun N - 1 uchun

J \u003d i + 1 dan N gacha

Agar V (j) bo'lsa< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Keling, dasturning ushbu qismini tushuntirib beramiz.

Hisoblagich bilan tashqi tsikldan foydalanib, keyingi elementlar bilan taqqoslash uchun V (i) elementni tanlang. Hisoblagich j bilan ichki tsikl taqqoslash uchun V (j) ning keyingi elementlarini tanlaydi. J ning boshlang'ich qiymati i + 1. Bu quyidagilardan birinchisi.

V (i) va V (j) elementlarning qiymatlarini almashtirish uchun biz ba'zi bir o'zgaruvchini kiritamiz, ular qatoriga qator elementlaridan birining qiymatini vaqtincha "yashiramiz" (dasturda u V (i)). Keyin V (i) elementga V (j) elementning qiymatini, V (j) elementga P o'zgaruvchida saqlanadigan V (i) qiymatni beramiz. Agar biz V (j) qiymatini P da "yashirsak", unda qiymatlar almashinuvi kodi quyidagicha bo'ladi: P \u003d V (j): V (j) \u003d V (i): V (i) \u003d P. Natija o'zgarmaydi.

Kimga massivni kamayish tartibida buyurtma qiling, tekshirish shartini V (j)\u003e V (i) shaklida yozish, ya'ni tengsizlik belgisini boshqasiga o'zgartirish kifoya.

Agar massiv raqamli emas, balki mag'lubiyatga ega bo'lsa va familiyalar massiv elementlariga kiritilsa, u holda 9.12 misol dasturiga ko'ra siz familiyalar ro'yxatini alifbo tartibida saralashingiz mumkin. Gap shundaki, kompyuterda ishlatiladigan alfavit harflari uchun quyidagi tengsizliklar to'g'ri keladi: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

9.13-misol . Matritsaning toq ustunlari uchun ijobiy elementlarning yig'indisini hisoblashF(M, N) va shaklga pul mablag'larini qaytarib olish.

Dastur algoritmi:

    2-qadam bilan tashqi tsikl yordamida biz birinchi ustundan boshlab matritsaning toq ustunlari indeksini hosil qilamiz.

    Biz musbat elementlarning yig'indisi yig'iladigan S yig'indisini nolga qo'ydik.

    Ichki tsiklda biz massiv elementining belgisini tekshiramiz.

    Agar massiv elementi ijobiy bo'lsa (\u003e 0), S ning yig'indisini hisoblang.

    Ichki tsikl tugagandan so'ng biz S summani shaklga chiqaramiz.

Parcha dasturlar:

J \u003d 1 dan N gacha bo'lgan qadam uchun 2-qadam

Agar F (i, j)\u003e 0 bo'lsa, u holda S \u003d S + F (i, j)

"Ustun summasi" ni chop etish; j; “:”; S 'j - ustun raqami!

Ichki ilmoqlar sizni tartibga solishga imkon beradi variantlarni sanab o'tish va analitik ravishda echib bo'lmaydigan muammolarni hal qilish. Sanab chiqish natijasida echimlarning variantlari olinadi, ular orasida muammo shartiga javob beradigan bittasi yoki bir nechtasi tanlanadi.

9.14-misol. 1801 rubl bor. 31 rublga qancha shokolad sotib olish mumkin. pulni to'liq sarflash uchun 18 rubl.

Dastur:

Miqdor \u003d 1801

AllChocolates \u003d Sum \\ 31: AllBuns \u003d Sum \\ 18

I \u003d 1 uchun Barchaga

AllBuns-ga j \u003d 1 uchun

Narx \u003d i * 31 + j * 18 'umumiy sotib olish narxi

Agar narx \u003d 1801 bo'lsa

"Shokolad:" ni chop etish; men; Yorliq (19); "Non:"; j

Keling, rus tilida nomlangan o'zgaruvchini ishlatadigan dasturni tushuntiramiz.

Birinchidan, biz faqat bitta shokolad yoki faqat rulonlarning maksimal miqdorini to'liq miqdoriga qanday sotib olish mumkinligini aniqlaymiz. VseChocolate va VseBulki olingan qiymatlarini qo'pol kuch ishlatishga urinishlar sonini shokolad va rulolar soniga cheklash uchun ishlatamiz. Shokolad sonining (i) va rulonlarning (j) har bir qiymati uchun biz ularni sotib olish uchun umumiy narxni aniqlaymiz. Agar hisoblangan Narx 1801 bo'lsa, u holda tanlangan variant muammoning echimlaridan biridir.

Tab () funktsiyasi, ushbu funktsiyadan keyin ma'lumot formaning chetidan qaysi pozitsiyadan ko'rsatilishini aniqlaydi. Agar Tab (19) bo'lsa, unda 19-pozitsiyadan.

Dasturda 3 ta mumkin bo'lgan sotib olish variantlari ko'rsatilgan:

Shokolad 7, rulon 88

Shokolad 25, rulon 57

Shokolad 43, rulon 26

Agar aniq javob berish zarur bo'lsa, qo'shimcha shartni shakllantirish kerak. Masalan, "shokoladdan kamroq rulon sotib olindi". Keyin yagona echim 3-variant bo'ladi.

O'rnatilgan pastadir dasturlash yordamida qo'pol kuch yordamida osonlikcha echilishi mumkin bo'lgan juda ko'p matematik muammolar mavjud.

Looplar sizga bir yoki bir nechta kod satrlarini bir necha marta bajarishga imkon beradi. VBA quyidagi ko'chadanlarni qo'llab-quvvatlaydi:

Uchun ... Keyingi har biri uchun ... Keyingi amal ... ko'chadan

Uchun. ... ... Keyingi. Takrorlashlar soni oldindan ma'lum bo'lsa, For ko'chadan foydalaniladi. ... ... Keyingi. For for loopida tsikl o'zgaruvchisi yoki tsikl hisoblagichi deb nomlangan o'zgaruvchidan foydalaniladi, u tsikl takrorlanganda har safar ma'lum miqdorga ko'payadi yoki kamayadi. Ushbu qurilish uchun sintaksis quyidagicha:

Hisoblagich uchun \u003d start To End Keyingi gaplar

Hisoblagich, boshlash, tugatish va o'sish parametrlari raqamli.

Eslatma. Ortish parametri ijobiy yoki salbiy bo'lishi mumkin. Agar ijobiy bo'lsa, start parametri oxirgi parametrdan kam yoki unga teng bo'lishi kerak, aks holda tsikl ishlamaydi. Agar o'sish manfiy bo'lsa, u holda tsikl tanasi bajarilishi uchun start oxiridan katta yoki teng bo'lishi kerak. Agar qadam ko'rsatilmagan bo'lsa, o'sish uchun standart qiymat 1 ga teng.

VBA For tsiklini quyidagi ketma-ketlikda bajaradi:

1. Loop o'zgaruvchisi hisoblagichining qiymatini ishga tushirish uchun o'rnatadi.

2. Loop o'zgaruvchisi hisoblagichi va yakuniy parametr qiymatini taqqoslaydi. Agar hisoblagich kattaroq bo'lsa, VBA tsiklni tugatadi. (Agar o'sish manfiy bo'lsa, u holda VBA tsikl o'zgaruvchisining hisoblagichi oxirgi parametr qiymatidan kichik bo'lishi sharti bilan tsikl bajarilishini to'xtatadi.)

3. Loop tanasi bayonotlarining bayonotlarini bajaradi.

4. Loop o'zgaruvchisi hisoblagichining qiymatini 1 ga yoki agar ko'rsatilgan bo'lsa, o'sish parametri qiymatiga oshiradi.

5. 2-4 bosqichlarni takrorlaydi.

Bir misolni ko'rib chiqing: f (t) funktsiyaning qiymatini hisoblang

a, b, n berilgan, agar t a dan b ga Dt \u003d (b-a) / (n-1) qadam bilan o'zgarsa.

Pastki misol 3 () Dim f () Yagona Dim a Yagona, b Yagona, t Yagona, dt Yagona Dim i Butun son sifatida, n Butun son sifatida Qo'ng'iroq o'qish ("a1", a): Qo'ng'iroq o'qish ("b1") , b): Read read ("c1", n) ReDim f (1 To n - 1) dt \u003d (b - a) / (n - 1): t \u003d a Chaqirish ("a2", "i") : Chaqirish ("b2", "t"): Chaqirish ("c2", "f (t)") Uchun i \u003d 1 To n - 1 t \u003d t + dt Agar t<= -1 Then f(i) = -1 ElseIf t > 1 Keyin f (i) \u003d 1 Boshqa f (i) \u003d t End Agar qo'ng'iroq qilsa ("a" & (2 + i), i): Chaqiring ("b" & (2 + i), t): Qo'ng'iroq qiling out ("c" & (2 + i), f (i)) Next i End Sub

Har bir qurilish uchun. ... ... Keyingi

Har bir ko'chadan uchun. ... ... Keyingi For loopiga o'xshaydi. ... ... Keyingi, lekin u har bir element uchun bir qator bayonotlarni bir necha marta takrorlash o'rniga ob'ektlar to'plamidan yoki massivdan takrorlaydi. To'plamda qancha element borligini bilmasangiz, ayniqsa foydalidir.

For цикл konstruktsiyasi uchun sintaksis. ... ... Keyingi:

Har bir element uchun Keyingi guruh bayonotlari

For For loopidan foydalanishda quyidagi cheklovlarni yodda tuting. ... ... Keyingi:

To'plamlar uchun element parametri faqat variant o'zgaruvchisi, umumiy ob'ekt o'zgaruvchisi yoki Ob'ektlar brauzerida keltirilgan ob'ekt bo'lishi mumkin

Massivlar uchun element parametri faqat Variant bo'lishi mumkin

Siz har bir ko'chadan foydalana olmaysiz. ... ... Keyingi qator foydalanuvchi tomonidan belgilangan turga tegishli, chunki variant o'zgaruvchisi foydalanuvchi tomonidan belgilangan turdagi qiymatni o'z ichiga olmaydi

Do ... Loop qurilishi

Do tsikli cheksiz ko'p marta bayonotlar blokini bajarish uchun ishlatiladi. Do qurilishining bir nechta lazzatlari mavjud. ... ... Loop, lekin har biri tsikldan qachon chiqish kerakligini aniqlash uchun shart ifodasini baholaydi. If const-da bo'lgani kabi. ... ... Keyin sharti False (nol) yoki True (nolga teng) bo'lishi mumkin bo'lgan qiymat yoki ifoda bo'lishi kerak.

Keyingi qurilishda Do. ... ... Loop operatorlari shart to'g'ri bo'lgan taqdirda bajariladi:

Do while Condition Loop bayonotlari

Ushbu tsiklda VBA avval shartni tekshiradi. Agar shart False bo'lsa, u barcha ko'chadan bayonotlarini o'tkazib yuboradi. Agar rost bo'lsa, VBA tsikl operatorlarini bajaradi, Do While operatoriga qaytadi va shartni yana tekshiradi.

Shuning uchun, ushbu konstruktsiya bilan ifodalangan tsikl, shart nol yoki To'g'ri bo'lmaganda, istalgan marta bajarilishi mumkin. E'tibor bering, agar shart birinchi marta tekshirilsa (False), tsikl tanasining bayonotlari bir marta ham bajarilmaydi.

Bir misolni ko'rib chiqing: Bir qatorning yig'indisini hisoblang

berilgan aniqlik bilan.

Sub misol 4 () Dim e As Single, x Single as, s Single Single m m Single, p Single Single, i As Single Call read ("a1", x): Call read ("b1", e) s \u003d 0 : i \u003d 1: m \u003d 1: p \u003d -1 Chaqirish ("a2", "i"): Chaqirish ("b2", "m"): Chaqirish ("c2", "s") Do while Abs (m)\u003e \u003d ep \u003d -p * xm \u003d p / is \u003d s + m Chaqirish ("a" & (2 + i), i): Chaqirish ("b" & (2 + i), Abs (m)): Chaqirish ("c" & (2 + i), s) i \u003d i + 1 Loop End Sub

Do ning yana bir o'zgarishi. ... ... Loop avval tsikl tanasining gaplarini bajaradi va keyin har bir bajarilishdan keyin shartni tekshiradi. Ushbu o'zgarish tsikl tanasidagi bayonotlar kamida bir marta bajarilishini ta'minlaydi:

Doop while shartini bajaring

Loop konstruktsiyasining qolgan ikkita ta'mi oldingilariga o'xshaydi, faqat shart False bo'lganda loop bajariladi:

Loop umuman ishlamaydi yoki ko'p marta ishlaydi:

Shunga qadar bajaring

loop operatorlari

Loop kamida bir marta ishlaydi:

operatorlar

To halqa qadar

7.2 Ichki ko'chadan.

Boshqarish tuzilmalarini boshqa boshqaruv tuzilmalari ichiga qo'yishingiz mumkin (masalan, agar ... Keyin For ... Next tsikli ichidagi blok). Boshqa boshqaruv tuzilmasi ichiga joylashtirilgan boshqaruv strukturasi joylashtirilgan deyiladi.

VBA-da boshqaruv tuzilmalarini joylashtirish chuqurligi cheklanmagan. Kodning o'qilishini yaxshilash uchun ichki boshqaruv tuzilmalaridan foydalanilgan holda qaror qabul qilish tuzilmasi tanasini yoki dasturdagi tsiklni almashtirish amaliyoti qabul qilingan.

Bir yoki bir nechta boshqa ko'chadan ilmoqqa joylashtirganda, ichki (ichki) va ichki (ichki) ko'chadan ajratib turadigan ichki ilmoqlar haqida gap boradi.

A (n, m) matritsaning Aij elementlarini ketma-ket yig'ish misolini ko'rib chiqing.

Pastki misol 5 () Dim a () Yagona, s () Yagona Dim Dim n butun sifatida, m Integer sifatida Dim i butun sifatida, j Integer sifatida Qo'ng'iroq o'qish ("a1", n): Qo'ng'iroq o'qish ("b1", m ) ReDim a (1 dan n, 1 dan m), s (1 dan n) "matritsani o'qish uchun i \u003d 1 dan ngacha j \u003d 1 dan m gacha readcell (i + 1, j, a (i, j)) ga qo'ng'iroq qiling) Keyingi j Keyingi i "Hisoblash i \u003d 1 uchun ns (i) \u003d 0 uchun j \u003d 1 uchun ms (i) \u003d s (i) + a (i, j) Keyingi j Chiqish (i + 1, m + 1 , s (i)) Keyingi i End Sub

Shuni esda tutingki, birinchi Next iborasi ichki For tsiklini yopadi va oxirgi Next operatori tashqi For loopini yopadi. Xuddi shunday, ichki if ifodalari uchun, End if operatorlari avtomatik ravishda eng yaqin If ifodasini yopish uchun qo'llaniladi. Nested Do tuzilmalari. ... ... Looplar xuddi shunday ishlaydi: eng uzoq Loop operatori eng uzoq Do operatoriga to'g'ri keladi.

Ikki o'lchovli massiv elementlarini Microsoft Excel ish sahifasiga kiritish / chiqarishda maxsus kirish / chiqish protseduralaridan foydalanish qulay:

Sub readcell (i Integer, j Integer, val As Variant) val \u003d Sheet1.Cells (i, j) .Value End Sub Sub outcell (i Integer, j Integer, val As Variant) Sheet1.Cells (i, j) .Value \u003d val End Sub

bu erda I - satr raqami, j - varaqning ustun raqami.

Boshqaruv tuzilmalaridan chiqib ketish

Exit operatori to'g'ridan-to'g'ri For loop, Do tsikli, Sub protsedurasi yoki Function protsedurasidan chiqishga imkon beradi. Exit operatori uchun sintaksis oddiy:

Hisoblagich uchun \u003d boshlash To oxirigacha [bayonot bloki] [bayonot bloki] Keyingi Do [(While | gacha) sharti] [bayonot bloki] [bayonot bloki] Loop

For tsikli ichidagi For va Do tsiklining ichidagi Exit bir necha marta paydo bo'lishi mumkin.

Exit Do bayonoti Do loop sintaksisining barcha lazzatlari bilan ishlaydi.

Exit For va Exit Do operatorlari, takroriy takrorlashni davom ettirmasdan yoki tsikl tanasida bayonot blokining bajarilishini kutmasdan, darhol tsiklni tugatmoqchi bo'lganingizda ishlatiladi.

Tsikldan chiqish uchun Exit operatoridan foydalanganda tsikl o'zgaruvchisining qiymatlari tsikl qanday tugashiga bog'liq:

Tsikl normal tugagach, tsikl o'zgaruvchisi qiymati tsikllar sonining yuqori chegarasidan bittaga ko'p bo'ladi

Agar tsikl muddatidan oldin tugasa, tsikl o'zgaruvchisi odatdagi qoidalarni hisobga olgan holda olgan qiymatini saqlab qoladi

To'plam oxirida tsikl tugagach, tsikl o'zgaruvchisi ob'ekt o'zgaruvchisi bo'lsa, Hech narsa yoki Variant o'zgaruvchisi bo'lsa, bo'sh bo'ladi.

Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: