VBA operatorlari: oddiy tanlov. Uslubiy bayonotlar va topshiriqlar Vba Smart If bayoni

Dasturlashda ê ni yanada egri yuving, parchalar bizga belgilangan mezonlarga ko'ra g'alaba qozonishimizga imkon beradi (xuddi shu tamoyil qozoniladi) AGAR Excel funktsiyalari).

Siz aqldan so'raganingizdek, eng muhim funktsiya AGAR Va biz darhol uning qanday ishlashiga hayron bo'lamiz:

If [SMART BU YERDA] Keyin "=> HA umova verna, TODI "Ko'rsatmalar, yaksho "true" Else "=> KUZISHGA QARSHI "Ko'rsatmalar, yakscho "bema'nilik" End If

Keling, mashg'ulotga o'taylik va o'zgarish vaqtida menga taqlid qilgan dumbaga murojaat qilaylik. Jarayonning metaforasi uning o'rtada ko'rsatilgan qatorning qiymati kabi dialog oynasini ochishida edi. F5:

Xonaga xatni qanday kiritish kerak F5, tse afv etish. Biz kimnidir qutqarmoqchimiz.

Sub o'zgaruvchilar () "Dim familiyani String sifatida, familiyani satr sifatida, yoshni butun son sifatida, satr_raqamini butun son sifatida e'lon qilish "Satr_raqamini o'zgartirish uchun o'zgartirishni belgilash = Range("F5") + 1 familiyani = Yacheykalar(satr_raqami, 1) fir , 2) yoshi = Yacheykalar(satr_raqami, 3) "MsgBox dialog oynasi familiyasi va " " & ism_ismi & "," & yosh & "yil" Oxirgi pastki qismi

Keling, aqlni dodamo qilaylik, yaku reverify - chi ê o'rtadagi qiymatni kiriting F5 raqam, uning oldida, chunki kod vikonano bo'ladi.

Funktsiyani tezlashtiramiz IsNumeric reverb ong uchun:

Pastki o'zgaruvchilar () "Yonlardagi qiymat nima (hajviy F5) ê soni (I IS NUMBER AGAR Ê BRIM) keyin "keyin bo'lsa IsNumeric (Range ("F5")) Keyin "O'zgarishlarni e'lon qilish Dim last_ , first_name As String, age As Integer, row_number As Integer "O'zgartirish uchun belgilangan qiymat satr_raqami = Range("F5") + 1 familiya = Yacheykalar (satr_raqami, 1) birinchi_ism = Yacheykalar (satr_raqami, 2) yosh = Yacheykalar (qator "MsgBox dialog familiyasi va" " " & first_name & "," & age & " age" End If End Sub

Shuningdek, biz ko'rsatmalarni yozishimiz kerak, go'yo aql o'rnatilmagan:

Sub o'zgaruvchilar () If IsNumeric (Range ("F5")) Keyin "Dim familiyasini String sifatida e'lon qilish, first_name String, age As Integer, row_number As Integer "O'zgartirish uchun qiymat belgilash satr_raqami = Diapazon + 1 familiya = Yacheykalar (satr_raqami, 1) birinchi_ism = Yacheykalar (satr_raqami, 2) yosh = Yacheykalar (satr_raqami, 3) "MsgBox dialog oynasi familiya va " " & first_name & "," & age & " ro_v" Boshqa "Shuning uchun "Muloqot oynasi : Oldingi" ni ko'rmang MsgBox "Qiymat kiritildi va diapazon ("F5") & "Tasdiqlab bo'lmadi!"

Endi raqamli bo'lmagan ma'nolar kundalik muammolarni keltirib chiqarmaydi.

16 qator ma'lumotlar qasos bo'ladi bizning massivida bilan Pratsyyuyuchi, bizning hujum reverbirtsí chi ê o'zgartirish row_number bo'ladi: "ko'proq past yoki undan ko'p 2" va "kamroq past yoki undan ko'p 17".

Keling, povnyannya operatorlarini tez ko'rib chiqaylik:

va tsí korisny operatorlari:

Keling, eng yaxshi aqllardan birini dodamo qilaylik VA operatorlar o'rtasida

Sub o'zgaruvchilar () If IsNumeric (Range ("F5")) So'ngra "Dim familiyasini String sifatida, name_name as String, age as Integer, row_number As Integer row_number = Range("F5") + 1 If row_numer > = 2 Va satr_raqami

Agar biz makromizni amaliyroq qilishni istasak, o'zgartirishimiz mumkin 17 bir o'zgarish uchun, yak mistila b kílkíst rowkív. Tse teri chegarasini o'zgartirmasdan massivdan qatorlarni qo'shish va olib tashlash imkonini beradi.

Farq qilish uchun biz o'zgarish yaratishimiz mumkin nb_rows va ushbu funktsiyani qo'shing.

Menda g'alaba qozonish funktsiyasi bor WorksheetFunction.CountA, funksiyaning analogi sifatida COUNTA Excelning o'zida.

Biz bu o'zgarish qiymatini yozib, birinchi ustunda bir nechta bo'sh bo'lmagan o'rtalarni tanlagan funksiya bo'lishini xohlaymiz. nb_rows:

Sub o'zgaruvchilar () If IsNumeric (Range("F5")) Keyin "YAKI NUMBER Dim familiyasi String sifatida, first_name As String, age As Integer, row_number As Integer Dim nb_rows As Integer row_number = Range("F5") = 1 WorksheetFunction. CountA (Range ("A:A")) "Qatorlar sonini hisoblash funktsiyasi, agar satr_raqami > = 2 va qator_raqami bo'lsa

ElseIf

ElseIf qo'shimcha opsiyalarni va keyin IF buyruqlarini qo'shish imkoniyatini beradi:

Agar [CLEAN 1] Keyin "=> YAKSCHO Umova 1 rost boʻlsa, TODI "Koʻrsatmalar 1 ElseIf [CLEAN 2] Keyin “=> YAKSCHO Umova 1 notoʻgʻri, Ale Umova 2 toʻgʻri, TODI “Koʻrsatmalar 2 Else” => Aks holda " Ko'rsatmalar Agar

Yakscho UMOVI 1 vykonuetsya, Ko'rsatma 1 bude vikonano ta operatordan mahrum AGAR(qaysi biri boshlanadi AGAR u End If bilan tugaydi). Yakscho UMOVI 2 ma'no qozonish " bema'nilik ", keyin siz vikonana bo'lasiz Ko'rsatma 2, va go'yo u shaytonini aylantirayotgandek " bema'nilik ", keyin Ko'rsatma 3(pid Boshqa) vikonano bo'ladi.

Sub scores_comment() "Xira qaydni butun son, ball_comment sifatida String note = Range("A1") sifatida o'zgartirish ElseIf note = 5 Keyin score_comment = "Garniy Score" ElseIf note = 4 Keyin score_comment = "Qoniqarli ball" ElseIf note = 3 Keyin score_comment = "Muvaffaqiyatsiz ball" ElseIf note = 2 Keyin score_comment = "Yomon ball" = "Yomon ball" Aks holda ball_comment = "Nol ball" Agar "Izoh o'rta B1 oralig'ida("B1") = ball_comment End Sub.

Tanlang

Ísnuê muqobil vikoristany Agar s bagatma ElseIf ko'rsatmalar, lekin buyruqning o'zi Tanlang, bunday vaziyatlarga ko'proq qanday yondashish kerak.

Keling, operator bilan makrosning ko't qismini ko'rib chiqaylik Tanlang:

Sub scores_comment() "Xira qaydni butun son sifatida o'zgartirish, score_comment sifatida String note = Range("A1") "Bahoga asoslangan sharhlar Case Note"

Varto boshqa o'yin operatorlari bilan ham g'alaba qozonishimiz mumkinligini ta'kidladi:

Hodisa >= 6

Turli ma'nolarda qo'llang:

Case Is = 6, 7 "qaysi qiymat = 6 yoki 7 holat 6, 7" qaysi qiymat yaxshi emas 6 yoki 7 holat 6 dan 10 gacha

The IF funktsiyasi VBA-da barcha iboralar ichida eng ko'p ishlatiladiganlardan biri hisoblanadi. IF funktsiyalari belgilangan shart bajarilgan yoki bajarilmaganligini tekshiradi. VBA-dagi IF funktsiyasi Excel-dagidan biroz boshqacha ishlaydi. Excelda IF funktsiyalari ikkita qiymatni oladi: teskari o'zgartirish qiymati, ya'ni uni TRUE yoki FALSE deb baholash mumkin va yangilanadi, ya'ni IF( shart, agar_shart_to'g'ri bo'lsa_qiymat, agar_shart_noto'g'ri bo'lsa_qiymat_qaytadi). Biroq, VBA-da IF funktsiyasi faqat birinchi qismdir, ya'ni. shart TRUE yoki FALSE deb baholanishini tekshiring. Boshqa KEYIN iborasining yordami uchun tayinlangan istalgan stsenariyni bosing.

VBA-da oddiy IF funktsiyasidan foydalanish

Mana bir misol IF funktsiyasi. VBA kodidagi bu nuqta shunchaki ko'rsatilgan shart (ya'ni 1 > 4) TRUE yoki FALSE deb baholanishini tekshiradi. Har qanday holatda, agar bir nechta o'rnatish mavjud bo'lsa, siz bu haqda o'ylaganingizda, krujka TRUE ga bo'linadi. Har qanday holatda, natija ekranda ko'rsatiladi. Funktsiya FALSE ga olib kelinganligi sababli, VBA kodi hech narsa qilmaydi.

1
2
3
4
5

Sub IF_FUNCTION()
Agar 7 > 1 bo'lsa, keyin
MsgBox "7 1 dan katta"
Agar tugaydi
end sub

The KEYIN bayonot mohiyatan ko'rsatma bo'lib, agar oldingi shart TRUE bo'lsa, undan keyingi bosqichlar bajarilishi kerakligini ko'rsatadi.

IF funktsiyasi sukut bo'yicha END IF deklaratsiyasi ilovaga IF funktsiyasining oxirgi qatori ekanligini bilish imkonini beradi. Quyida IF funksiyasining biroz qisqaroq shakli berilgan. E'tibor bering, bunda END IF iborasi o'chirildi va shuning uchun uchta kod qatori bittaga birlashtirildi.

Sub IF_FUNCTION_SHORT()
Agar 7 > 1 bo'lsa, MsgBox "7 1 dan katta"
end sub

Biroq, bu shakl faqat yo'q bo'lganda ishlatilishi kerak BOSHQA yoki BOSHQA BO‘LSA bayonotlar talab qilinadi. Keling, ular nima ekanligini va ular IF funktsiyasini yaxshilashga qanday yordam berishini ko'rib chiqaylik.

VBA'da ELSE bilan Vicorist IF funktsiyasi

Mumkin bo'lgan hollarda, agar aql TRUE deb baholansa, IF funktsiyasi fretning oxirigacha yaratilishida aybdor ekanligini bilamiz. Ammo baribir, siz o'shalar haqida o'ylaysiz, kichkintoylar qanday bo'lsa ham, sizni kutib olishdan yaratiladi. ELSE bayonoti uchun IF funktsiyasini yutib olishning bir usuli. Oddiy qilib aytganda, ELSE iborasi IF bandida ko'rsatilgan shart FALSE deb baholanganda, ilova ELSE blokida ko'rsatilgan amallarni bajarishiga sabab bo'ladi.

Quyidagi VBA kodida, IF funksiyalarida noto'g'ri deb baholanadi, ELSE blokida ko'rsatilgan uslublar bajariladi, natijada ekranda "1 4 dan kichik" xabari paydo bo'ladi. Blokka bir nechta qadamlar qo'shilishi mumkin, shunda hammasi birin-ketin bajariladi.

1
2
3
4
5
6
7

Sub IF_ELSEIF_FUNCTION()
Agar 1 > 4 bo'lsa

boshqa:
MsgBox "1 4 dan kichik"
Agar tugaydi
end sub

ELSEIF va ELSE bilan qo'shimcha IF funktsiyalari uchun: VBA'da

ELSE bayonoti ELSEIF bayonotlari uchun tasdiqlanishi mumkin. Xushbo'y hid aniq onglarni qayta tekshirish uchun xosdir va ularning barchasi TO'LIQ deb baholanganligi sababli, dalillar aqlning ELSE belgisida belgilanadi, qoldiq qabullar bo'ladi. IF bayonoti berilgan shartni tekshiradi. Bu FALSE bo'lib chiqdi, birinchi ELSEIF bayonotida ko'rsatilgan shart tekshiriladi. ELSEIFning boshqa qismida tayinlangan siz o'ylagan narsaning taqdirini o'z zimmangizga olishning hidi kabi, faqat keyin emas, balki hal qilinadi. Bularning barchasi IF va ELSEIF bandlarida FALSE ga o'rnatilgan, faqat oxirgi ELSE ostida bir oz eslatib o'tilgan: blok bajariladi. Takrorlash uchun, hid bir nechta ELSEIF bayonotlari bo'lganligi sababli, birinchi bo'lib TRUE deb baholanganlar rad etiladi va bir marta o'tkazib yuborilganda, ijro kodi END IF bayonotiga tushadi. ELSEIF ning eng katta aqllari bo'ladimi, ular TRUE deb baholanadi, faqat birinchi bo'lib TRUE deb baholanganlar bajariladi.

1
2
3
4
5
6
7
8
9
10
11


Agar< >keyin
MsgBox "1 4 dan katta"
ElseIf< >keyin

ElseIf< >keyin

Boshqa< >:

Agar tugaydi
end sub

Matn quyida ko'rsatilgan, birinchi navbatda IF (IF) belgilanadi. U FALSE deb baholanganligi sababli, birinchi ELSEIF sharti, keyin ikkinchisi baholanadi. Ulardan birortasi bo'lmasa, ular TRUE deb baholandi, ELSE da eslatib o'tilgan qadamlar: umova ê ijro etildi.

1
2
3
4
5
6
7
8
9
10
11

Sub IF_ELSEIF_ELSE_FUNCTION()
Agar 1 > 4 bo'lsa
MsgBox "1 4 dan katta"
ElseIf 2 > 4 Keyin
MsgBox "2 4 dan katta"
ElseIf 3 > 4 Keyin
MsgBox "3 4 dan katta"
boshqa:
MsgBox "1, 2 yoki 3 - 4 dan kam"
Agar tugaydi
end sub

Tezkor maslahat - IF bayonotlari tezroq ishlaydi

Yon koddagi qisqartirish shunga o'xshash ko'rinadi. Boshqa funktsiyadagi ikkita ELSEIF aqli ag'darilishi mumkin. Sizningcha, VBA kodida qaysi biri tezroq ishlaydi?
Agar tugaydi
Keyingi i
MsgBox taymer - t
end sub

javob shundaki, ikkinchisi birinchisiga qaraganda tezroq ishlaydi. Nega? O'zidan oldingi koddagi notekis chiziqlar bo'ylab harakatlanishda to'xtash uchun ikki soniya kerak bo'lgan narsa, xuddi shunday bo'lganidek, u RO'QIQ deb baholanadi. ELSEIF birinchi bo'lib, TRUE bajariladi va bu shartlarning hech biri, hatto ular TRUE deb baholanishi kerak bo'lsa ham, baholanmaydi. VBA kodining birinchi holatida ELSEIF on-line 6 funksiyasi TRUE deb baholanadi, ikkinchisida esa 5-qator mezonlarga javob beradi. Ko'proq, pastroq aqlga ega bo'lgan TRUE deb baholanadi, avvalroq u VBA kodiga joylashtirilishi kerak, qolganlari bir xil bo'ladi.

If...Then...Else operatorining bir qatorli ko'p qatorli konstruktsiyasi va Excel VBA kodida keng tarqalgan IIf funksiyasi - sintaksis, komponentlar, ilovalar.

Agar... Keyin... Boshqa bayonot

Operator Agar... Keyin... Boshqa boshqaruvni operatorlar bloklaridan biriga o'tkazishni tayinlash fikrni aylantirish natijalariga bog'liq.

Bir qatorli qurilish

Operator Agar... Keyin... Boshqa kalit so'zlarsiz bir qatorli dizaynda g'alaba qozonishi mumkin Boshqa, Agar tugaydi.

Bir qatorli konstruksiya sintaksisi If...Then...

Agar[umova] Keyin[operator]

Bir qatorli qurilish komponentlari Agar... keyin...

  • umova To'g'ri yoki Yolg'on;
  • operatorlar umova qiymatini aylantirish To'g'ri;

Komponent kabi umova qiymatini aylantirish Yolg'on, qurilishdagi bayonot bloki Agar... keyin...

dumba 1

Sub primer1() Dim d Butun son, a As String d = InputBox("1 dan 20 gacha raqamni kiriting", "Masalan 1", 1) Agar d > 10 bo'lsa, a = "Raqam " & d & " 10 dan katta bo'ladi. " MsgBox va oxirgi pastki

Bagatoryadna qurilishi

If...Then...Else ketma-ketlik konstruktsiyasining sintaksisi

Agar[umova] Keyin[operator] ElseIf[umova] Keyin[operator] ---------------- Boshqa[operator] Agar tugaydi

Bagatorium qurilishining tarkibiy qismlari Agar... Keyin... Boshqa:

  • umova- kalit so'zdan keyin raqamli yoki qatorli ifoda Agar yoki ElseIf bu mantiqiy ma'noni aylantiradi To'g'ri yoki Yolg'on;
  • operatorlar- komponent sifatida ishlatiladigan VBA Excel kodidagi bayonot bloki umova qiymatini aylantirish To'g'ri.
  • nuqta chiziq qatorning qo'shimcha strukturaviy bloklarini belgilang ElseIf [umova] Keyin bu qatorlar [operator];
  • kalit so'zdan keyin bayonot bloki Boshqa vykonuetsya har qanday turdagi vipadka, lekin zaryadlash kodiga tizimli blok Boshqa bu qatorlar [operator] obov'azkovim emas va kamchiliklar bo'lishi mumkin.

Komponent kabi umova qiymatini aylantirish Yolg'on, keyin qurilishda operatorlar bloki Agar... Keyin... Boshqa bu dastur boshqaruvi o'tkazib yuboriladi va kodning keyingi qatoriga o'tkaziladi.

Bagatory-qator dizaynining eng oddiy varianti Agar... Keyin... Boshqa:

Agar[umova] Keyin[operator] Boshqa[operator] Agar tugaydi

dumba 2

Sub primer2() Dim d Butun son, a As String d = InputBox("1 dan 40 gacha raqamni kiriting", "2-nasl", 1) Agar d< 11 Then a = "Число " & d & " входит в первую десятку" ElseIf d >10 va d< 21 Then a = "Число " & d & " входит во вторую десятку" ElseIf d >20 va d< 31 Then a = "Число " & d & " входит в третью десятку" Else a = "Число " & d & " входит в четвертую десятку" End If MsgBox a End Sub

Funktsiya IIf

Funktsiya Agar berilgan aqlni qayta tekshirish va qayta tekshirish natijasiga ko'ra qiymatni qayta-qayta aylantirish.

Funktsiya sintaksisi

Agar([umova], [bu rost], [noto'g'ri])

IIf funksiyasining komponentlari

  • umova- mantiqiy qiymatlarni aylantiruvchi raqamli yoki qatorli ifoda To'g'ri yoki Yolg'on;
  • Aynan To'g'ri Agar, kabi umova qiymatini aylantirdi To'g'ri;
  • Yolg'on- qiymat, funktsiyani qanday aylantirish kerak Agar, kabi umova qiymatini aylantirdi Yolg'on.

dumba 3

Sub primer3() Dim d Butun son, a As String d = InputBox("1 dan 20 gacha raqamni kiriting", "3-nasl", 1) a = IIf(d)< 10, d & " - число однозначное", _ d & " - число двузначное") MsgBox a End Sub

“Bekor qilish” tugmachasini bosganda yoki kirish oynasi dialog oynasini xoch bilan yopganda, ushbu bosqichlarda bo'sh qator aylantirilishi uchun kechirim hosil bo'ladi. D Integer turiga bo'sh qator o'zgartirishlar tayinlanishi kechirim talab qiladi. Muloqot oynasining "OK" tugmasini bosganda, matn formatida kiritish maydoniga kiritilgan raqam, VBA Excel avtomatik ravishda o'zgartirishning raqamli formatiga o'zgartiradi d.

Asosiy Move VBA operatorlari

Sharhlar (0)

3.1. Operatorlarni ro'yxatga olish qoidalari

Operatorlarni yozishda quyidagi qoidalarga amal qiling:

Yangi operator terisi yangi qatordan yozib olinadi.

Bir qatorga bir nechta operatorlarni yozish uchun ular o'zaro juft (:) bilan bo'linadi.

Agar operator bir qatorda harakat qilmasa, u holda qator oxiriga bo'sh joy belgisini (_) qo'yish kerak, so'ngra keyingi qatorga to'g'ri kelmagan qismni davom ettirish kerak.

3.2. Taklif operatori

Operator g'alaba qozonish uchun jalb qilinadi, go'yo o'zgaruvchan, yangi qiymat berish kerak. Win mumkin tajovuzkor sintaksisi:

IM'YA_ZMINNOY= VIRAZ

Shu bilan birga, ballar o'ng qismda hisoblanadi, keyin esa chap qismda turadigan natijaning o'zgarishi kutiladi.

Misol uchun. Matematik virusning boshlanishini jalb qilish uchun operatorning yordami uchun yozing:

VBA-da butun virusni tajovuzkor operator ishtirokida yozib olish mumkin:

Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

3 .3. Operatorlarni kiritish

3 .3.1. Operator va funksiya MsgBox

Operator MsgBox Muloqot oynasiga ma'lumotlarning ko'rinishini o'rnating va tugmani qisqa tugma bilan bosish rejimini o'rnating.

Win mumkin tajovuzkor sintaksisi:

MsgBox Bildirishnomalar[,Tugmalar][, Sarlavha]

Argumentlar:

Maslahat - obov'yazykovyy argument, scho víkny ínformatsiyne voídomlennya da so'raydi. Belgi bilan birlashtirilgan bir qancha matn qatorlaridan tuzilishi mumkin & . Kimning argumentidan iqtibos keltiring Chr(13) yangi qatorga o'tishdan oldin ma'lumotni ko'rsatish soatiga olib kelish.

Tugmalar - bu argumentning qiymati oynada paydo bo'ladigan tugmalar toifasini aniqlaydi. Depozit tugmasi argumentining qiymati belgi bilan bir xil. Agar u ko'rsatilmagan bo'lsa, uyg'onish oynasida tugmalar ko'rsatilishi kerak bo'lsa, OK tugmasi ko'rsatilsa, reklama uchun qiymat tanlanadi. Stolda 3.1 Bildirishnoma oynasidagi tugmalar va piktogrammalarning mumkin bo'lgan kombinatsiyasi.

sarlavha - Oyna sarlavhasini o'rnating.

Funktsiya MsgBox Muloqot oynasida tugma qanday bosilganligini ko'rsatish uchun qiymatni Integer yozish uchun aylantiring.

3.1-jadval. O'zgartirish tugmasining haqiqiy qiymatlari

Fermentatsiya

Dalil

OK tugmasi

OK va Skasuvannya tugmalari

Ha va Yo'q tugmalari

Tugmalar Shunday qilib, Ní ta Skasuvannya

Tugmachalar Pin, Takrorlash va E'tibor bermaslik

VbAbortRetryIgnore

Takrorlash va Skasuvati tugmalari.

Axborot belgisi

oziq-ovqat belgisi

do'l belgisi

Misol uchun. Iltimos, joriy sana haqida ma'lumot bering.

MsgBox "Bugun taqvimda" & Sana , "Uvaga"

Natijada, keyingi bosqich ko'rsatiladi (3.1-rasm).

OK tugmasini bosgandan so'ng, so'rov yopiladi va dastur MsgBox qo'ng'irog'ining orqasida bo'lishi kerak bo'lgan operatordan uyg'onadi.

3.3.2. Funktsiya InputBox

Funktsiya InputBox zdíysnyuê vídnjuê vínnja zmínnyh víníh víkna víkna víkna ta maê oldinga siljish sintaksisi:

Im'ya_Zminniy = InputBox(Eslatma[, Sarlavha] )

Argumentlar:

Maslahat - Obov'yazykovy argumenti. Axborot yozuvining oxirida kiritiladigan sensor qiymatini tushuntirish uchun nima deyish kerakligini so'rang

sarlavha - Oyna sarlavhasini o'rnating.

Misol uchun, Klaviaturadan N o'zgartirish qiymatini kiriting, qiymatni 10 ga o'tkazing.

Buning uchun siz tajovuzkor operatorni burishingiz mumkin:

N = InputBox("Kirish N", "Kirish ma'lumotlari",10)

Natijada, N ning o'zgartirish qiymatini kiritish uchun keyingi oyna ko'rsatiladi (3.2-rasm).

Agar qulflash qiymati to'g'ri bo'lsa, "OK" tugmasini bosgandan so'ng, kiritish oynasi yopiladi, N o'zgartirilganda 10 qiymati belgilanadi va dastur operatordan kirgandan so'ng darhol qo'ng'iroqning orqasida bo'lishi kerak. InputBox.

Agar qulflash qiymati koristuvachevga mos kelmasa, u holda OK tugmasini bosishdan oldin N o'zgartirishning kerakli qiymatini kiritish kerak.

3 .4. Smart IF bayonoti

Parchalanuvchi sanab o'tish jarayonini amalga oshirish uchun VBA operatordan foydalanadi Agar… Keyin… Aks holda, perevírki aqllarining eng oddiy shakli hisoblanadi. Win mumkin tajovuzkor sintaksisi:

AgarUMOVIKeyinOPERATOR_1ElseOPERATOR_2

OPERATOR_1 vykonuetsya, kabi UMOVI to'g'ri, aks holda g'olib OPERATOR_2. Bunda If…Then…Else operatori bir qatorda yoziladi.

UMOVI- Tse viraz mantiqiy turi. Virazu natijasi Boolean turi bo'lishi mumkin. Viraz kechirishi va katlanishi mumkin. Oddiy fikrlarni yozib olishda barcha mumkin bo'lgan operatsiyalar ko'k rangda, jadvalda ko'rsatilgan. 3.2.

stol3 .2. mantiqiy ko'k

Operatsiya

Ism

Viraz

Natija

To'g'ri, bu A B ga yaqinroq ekanligini anglatadi

To'g'ri, bu A ning B bilan bir xil emasligini anglatadi

To'g'ri, A bilan bir xil, ko'proq

To'g'ri, bu kamroq

Ko'proq chi teng

To'g'ri, qaysi biri ko'proq yoki kamroq

Kamroq yoki qimmatroq

To'g'ri, A kamroq yoki yaxshiroq

Katlama aqllari oddiy yo'llar zastosuvannya mantiqiy operatsiyalar va dumaloq kamon iborat. Mantiqiy operatsiyalar ro'yxati Jadvalda ko'rsatilgan. 3.3.

stol3 .3. Mantiqiy operatsiyalar

Ism

Viraz

Natija

mantiqiyroq
taqiqlangan

Mantiq I

Mantiqiy ABO

Aqlli operatorda operator blokining maqbul almashtirilishi teri operatori hisoblanadi. Bu vaqtda aqlli operator ko'rinishi mumkin:

AgarUMOVIKeyin

BLOCK_OPERATOR_1

BLOCK_OPERATOR_2

Oxiri If

Aqliy operatorda aqllarning bir dekilini burish mumkin. Bu vaqtda aqlli operator ko'rinishi mumkin:

AgarUMOVI_1Keyin

BLOCK_OPERATOR_1

ElseIfUMOVI_2Keyin

BLOCK_OPERATOR_2

Boshqa

oxiriAgar

dumba 1. Rasmdagi algoritm uchun dasturning bir qismini yozing. 3.3.

dumba 2. Rasmdagi algoritm uchun dasturning bir qismini yozing. 3.4.

3.5. Case Operator-ni tanlang

Select Case operatori qo'lda tanlaydi, agar xatoda bir xil qiymatning qiymati bo'lsa, ruxsat etilgan qiymatlarning maksimal soni bo'lsa, boshqa qiymatni tanlash kerak. Vín aqlli operatorlarga ham tegishli, ammo boshqa ko'rinish bo'lishi mumkin:

Case-ni tanlangREVIRATED_VIRAZ

holVALUE_1

OPERATORS_1

holQIYMAT_ 2

OPERATORLAR_ 2

. . .

holVALUE_N

OPERATORLAR_N

[ holBoshqa

Aks holda_ OPERATORLAR]

Tanlovni tugatish

REVIRATED_VIRAZ balki ona, skalyar tip bo'l, krim nutqi. QIYMAT qiymat yoki intervallarni, suv-mustahkamlash bir va bir topaklar ma'lum miqdorda qo'shing.

Turi QIYMAT aybdor zbígatisya z turi REVIRAZI_VIRAZI.

Orqaga qarab sanaladi REVIRATED_VIRAZ. Ma’nolardan biriga qancha ma’no keladi VALUE_I, keyin g'alaba qozoning OPERATORS_I Tanlovni tugatish. Bu qiymat bir xil qiymatlar bilan o'zgarmaydi VALUE_I, keyin g'alaba qozoning Boshqa_operatorlar bu boshqaruv operatorga o'tadi, keyin nima turadi Tanlovni tugatish

Misol uchun. Rasmdagi algoritm uchun dasturning bir qismini yozing. 3.5, bu o'zgarish qiymatini S o'zgarishini n qiymati sifatida belgilaydi.

3.6. sikl operatori

Tsiklik sanab o'tish jarayonini amalga oshirish uchun, ya'ni bir yoki bir nechta operatorlar, bir yoki bir nechta operatorlar tsikl operatori bo'lib xizmat qiladi. Uchun…Keyingi, bu keyingi sintaksis bo'lishi mumkin:

UchunCHILD=START_VALUEToEND_VALUEqadamCROC

BLOCK_OPERATOR

BLOCK_OPERATOR

KeyingisiLICHILNYK

For…Keyingi tsikli o'zgarish qiymatini takrorlaydi LICHILNYK, tsiklning parametri sifatida, boshoqdan belgilangan o'zgarish hosilidan oxirgi qiymatgacha. Bu bilan, lichnikning yangi teri qiymati bilan tsiklning tanasida operatorlar blokini kuzatib borish xavfsizdir. Yakscho qadamCROC dizayn vydsutnya da, keyin siz ish qimmat ekanligini, qulf g'amxo'rlik qilish kerak 1. Operator orqasida. Chiqish uchun oldin loop bayonotidan chiqishingiz mumkin LICHILNYK qolgan qiymatga erishing.

O'xshash ob'ektlar guruhidan ob'ektlarni sanab o'tish uchun, masalan, diapazon yoki massivning o'rtasida, tsikl operatorini qo'lda tanlang. Uchun…Har bir…Keyingi.

Har birigaelementInguruh

BLOK_ OPERATOR

BLOCK_OPERATOR

Keyingisielement

VBA-da takroriy soni noma'lum bo'lgan tsikllarni tashkil qilish uchun boshqa tsikl operatorlari qo'shiladi:

peredumovoy bilan tsikllar DoVaholankihalqa,

Dogachahalqa;

postum bilan tsikllar - DohalqaVaholanki,

Dohalqagacha.

Quyida sikldagi cx iboralarining sintaksisi keltirilgan:

Peredumovoydan velosipedDo Vaholanki halqa

Do whileUMOVI

BLOCK_OPERATOR

BLOCK_OPERATOR

Peredumovoydan velosipedDo gacha halqa

DogachaUMOVI

BLOCK_OPERATOR

BLOCK_OPERATOR

O'limdan keyingi davr bilan tsiklDo loop while

BLOK_ OPERATOR

BLOCK_OPERATOR

loop whileUMOVI

O'limdan keyingi davr bilan tsiklDo Qachongacha aylanish

BLOK_ OPERATOR

BLOCK_OPERATOR

Qachongacha aylanishUMOVI

Operator DoVhile…Loop nuqtalarda, docklarda operator blokining bir necha marta takrorlanishini ta'minlang UMOVI dorimuetsya, va operator



Boshqa yangiliklar

3.5.1 Aqlli va aqldan ozgan o'tish operatorlari. Operator Agar…Keyin... Boshqa

VBA mind-bükme, If...Then... Else operator, If construct nesting

Aqlli o'tish operatori- harakatlanuvchi dasturlashning eng muhim va eng keng tarqalgan elementlaridan biri. Ularning ishining asosiy printsipi oddiy: bu aqlga to'g'ri kelishi qayta ko'rib chiqiladi (haqiqat shundaki, har qanday turdagi bo'lish chibnistdir) va boshqa turdagi dasturning noto'g'riligi bitta yoki dasturdan tuzatiladi. boshqa. VBA-da ikkita aqlli o'tish operatori mavjud: If… then… Else va Select Case.

Operator Agar... Keyin... Dasturchilar orasida eng mashhuri Else. Yangi sintaksis quyidagicha ko'rinadi:

Agar Umova Unda
Buyruq 1

Kim bilan:

  • Umov- Haqiqatga aylantirilgan Viraz. Agar bu to'g'ri bo'lsa, unda 1 Buyruq muqaddas qilingan, agar u yomon bo'lsa - Buyruq2;
  • UmoviN- dodatkoví aql, yakí hurmat qilinishi mumkin. Agar badbo'y hid hilpirasa (viraz UmoviN to'g'ri), demak KomandiN hilpirayapti.

If…Then... Else bayonoti buziladi:

  • agar bir fikrning to‘g‘riligi uchun qayta ko‘rib chiqish zarur bo‘lsa va shu bilan birga, har xil aql bo‘lsa, bu diyuga o‘xshaydi:

Agar nTemperature< 10 Then

MsgBox "Kurjangizni kiying"

  • dumba oldidagilarni talash kerak bo'lsa va nomuvofiq paytlarda vikonaty ínsu díyu:

Agar nTemperature< 10 Then

MsgBox "Kurjangizni kiying"

MsgBox "Shamoldan himoyachini kiying"

  • agar o'n yillik aqlning haqiqiyligiga o'tish kerak bo'lsa (mantiqiy operatorlarni tanlashga hurmat):

Agar (nTemperatura< 10) And (bRain = True) Then

MsgBox "Kurjangizni kiying va soyabon oling"

  • xuddi birinchi reverb yolg'onga aylanganidek, uni ko'proq dekil onglari uchun qayta tekshirish kerak (bu holda ElseIf-ni burish oson):

Agar (bIGoInCar = True) bo'lsa

MsgBox "Avtomobil uchun libos"

ElseIf nTemperature< 10 Then

MsgBox "Kurjangizni kiying"

MsgBox "Siz ko'ylakga borishingiz mumkin"

Ushbu ilova uchun bIGoInCar parchalari mantiqiy turga o'zgartiriladi va o'z-o'zidan True yoki False qiymatlarini qabul qiladi, birinchi qator quyidagicha ko'rinishi mumkin:

Agar biGoInCar bo'lsa ...

Deyakí hurmat shkodo vykoristannya If...Shunday... Aks holda:

  • kalit so'z Keyin If that mind bilan bir qatorda bo'lishi mumkin. Agar siz yogani keyingi qatorga o'tkazsangiz, kechirim haqida eslatmani ko'rasiz;
  • Agar siz buyruqni tarqatmoqchi bo'lsangiz, agar vicoon kerak bo'lsa, agar bu to'g'ri bo'lsa, nima tuzatilayotgani haqida o'ylab ko'ring, If va Keyin bilan bir qatorda, End If yoza olmaysiz:

Agar nTemperature< 10 Then MsgBox "Одеть куртку"

  • Xo'sh, agar siz bir qator buyruqlar yoki Else / ElseIf konstruktsiyalarini yutib olsangiz, End If, masalan, obov'yazkovo yozish kerak bo'lsa - aks holda, sintaktik kechirim mavjud.
  • If…Then ifodasi uchun buyruq bloklarini ko'rish uchun qadamlarni tanlash tavsiya etiladi. Aks holda kodni o'qish muhim bo'ladi.
  • Agar ... U holda iboralarni birma-bir joylashtirish mumkin:

Agar MyVar = 5 bo'lsa

MsgBox "MyVar=5"

Agar MyVar = 10 bo'lsa

MsgBox "MyVar=10"

Planshetlar