VBA satrlari va taqqoslash operatorlari. VBA mantiqiy operatorlari Vba mantiqiy operatorlari

Excelda VBA kodini yozishda har qadamda o'rnatilgan operatorlar to'plamidan foydalaniladi. Ushbu operatorlar matematik, qatorli, taqqoslash va mantiqiy operatorlarga bo'linadi. Keyin har bir operator guruhini batafsil ko'rib chiqamiz.

Matematik operatorlar

Matematikaning asosiy operatorlari quyidagi jadvalda keltirilgan.

Jadvalning o'ng ustunida qavs bo'lmagan holda standart operatorning ustunligi ko'rsatilgan. Qanday qilib ifodaga qavs qo'shsangiz, VBA bayonotlarini bajarish tartibini xohlagancha o'zgartirishingiz mumkin.

String operatorlari

Excel VBA-dagi asosiy magistral operatori bu biriktirish operatoridir & (birlashtirish):

Taqqoslash operatorlari

Taqqoslash operatorlari ikkita raqam yoki qatorni taqqoslash va shunga o'xshash mantiqiy qiymatni qaytarish uchun ishlatiladi Mantiqiy (To'g'ri yoki noto'g'ri). Asosiy Excel VBA taqqoslash operatorlari ushbu jadvalda keltirilgan:

Mantiqiy operatorlar

Mantiqiy operatorlar, taqqoslash operatorlari kabi, turdagi mantiqiy qiymatni qaytaradilar Mantiqiy (To'g'ri yoki noto'g'ri). Asosiy Excel VBA mantiqiy operatorlari quyidagi jadvalda keltirilgan:

Yuqoridagi jadvalda VBA-da mavjud bo'lgan barcha mantiqiy operatorlar ro'yxati keltirilgan emas. Mantiqiy operatorlarning to'liq ro'yxatini Visual Basic Developer Center-da topish mumkin.

Ichki funktsiyalar

VBA-da kodlarni yozishda ishlatilishi mumkin bo'lgan ko'plab o'rnatilgan funktsiyalar mavjud. Eng ko'p ishlatiladigan ba'zi birlari quyida keltirilgan:

Funktsiya Harakat
Abs Belgilangan raqamning mutlaq qiymatini qaytaradi.
  • Abs (-20) 20 qiymatini qaytaradi;
  • Abs (20) qaytib keladi 20.
Chr Parametrning raqamli qiymatiga mos keladigan ANSI belgisini qaytaradi.
  • Chr (10) chiziq oralig'ini qaytaradi;
  • Chr (97) belgini qaytaradi a.
Sana Joriy tizim sanasini qaytaradi.
DateAdd Belgilangan vaqt oralig'ini belgilangan sanaga qo'shib qo'yadi. Funktsiya sintaksisi:

DateAdd ( oraliq , raqam , sana )

Bahs qaerda oraliq berilganga qo'shilgan vaqt oralig'ining turini belgilaydi sana argumentda ko'rsatilgan miqdorda raqam .

Dalil oraliq quyidagi qiymatlardan birini olishi mumkin:

  • DateAdd ("d", 32, "01.01.2015") 2015 yil 01/01 sanasiga 32 kun qo'shiladi va shu bilan 02.02.2015 sanasini qaytaradi.
  • DateAdd ("ww", 36, "01.01.2015") 2015 yil 1-yanvarga 36 xaftani qo'shadi va 2015-yil 09-sentabrga qaytadi.
DateDiff Belgilangan ikkita sana orasidagi belgilangan vaqt oralig'ining sonini hisoblab chiqadi.
  • DateDiff ("d", "01.01.2015", "02.02.2015") 01.01.2015 dan 02.02.2015 gacha bo'lgan kunlar sonini hisoblab chiqadi, 32 qaytadi.
  • DateDiff ("ww", "01.01.2015", "03.03.06") 01.01.2015 dan 03.03.2016 gacha bo'lgan hafta sonini hisoblab chiqadi, 61 ga qaytadi.
Kun Belgilangan sanada oy kuniga to'g'ri keladigan butun sonni qaytaradi.

Misol: Kun ("29/01/2015") 29 raqamini qaytaradi.

Soat Berilgan vaqtdagi soat sonini ifodalovchi butun sonni qaytaradi.

Misol: Soat ("22:45:00") 22 raqamini qaytaradi.

InStr Tamsayı va ikkita qatorni argument sifatida qabul qiladi. Ikkinchi qatorning paydo bo'lish holatini birinchisida qaytaradi, qidiruvni butun son bilan belgilangan pozitsiyadan boshlaydi.
  • InStr (1, "bu siz izlayotgan so'z", "so'z") 13 raqamini qaytaradi.
  • InStr (14, "Bu erda qidiruv so'zi, va bu erda yana bir qidiruv so'zi", "so'z") 38 ni qaytaradi.

Eslatma: Raqam argumentini tashlab yuborish mumkin, bu holda qidirish ikkinchi funktsiya argumentida ko'rsatilgan satrning birinchi belgisidan boshlanadi.

Int Belgilangan raqamning butun qismini qaytaradi.

Misol: Int (5.79) natijani qaytaradi 5.

Sanasi Qaytish To'g'riagar berilgan qiymat sana bo'lsa yoki Yolg'on - agar sana bo'lmasa.
  • IsDate ("01.01.2015") qaytadi To'g'ri;
  • ISDate (100) qaytadi Yolg'on.
IsError Qaytish To'g'riagar berilgan qiymat xato bo'lsa yoki Yolg'on - agar bu xato bo'lmasa.
IsMissing Ixtiyoriy protsedura argumentining nomi funktsiya argumenti sifatida beriladi. IsMissing qaytadi To'g'riagar ko'rib chiqilayotgan protsedura argumenti uchun qiymat berilmagan bo'lsa.
IsNumeric Qaytish To'g'riagar berilgan qiymatni raqam deb hisoblash mumkin bo'lsa, aks holda qaytaradi Yolg'on.
Chapda O'tkazilgan satr boshidan belgilangan belgilar sonini qaytaradi. Funktsiya sintaksisi quyidagicha:

Chapga ( chiziq , uzunlik )

qaerda chiziq Asl satr va uzunlik - satr boshidan hisoblab, qaytib kelgan belgilar soni.

  • Chapga ("abvgdezhziklmn", 4) "abcg" qatorini qaytaradi;
  • Chapga ("abvgdezhziklmn", 1) "a" qatorini qaytaradi.
Len Satrdagi belgilar sonini qaytaradi.

Misol: Len ("abvgdej") 7 raqamini qaytaradi.

Oy Belgilangan sanadagi oyga mos keladigan butun sonni qaytaradi.

Misol: Oy ("29.01.2015") 1 qiymatini qaytaradi.

O'rta O'tkazilgan satrning o'rtasidan belgilangan belgilar sonini qaytaradi. Funktsiya sintaksisi:

O'rta ( chiziq , boshlang , uzunlik )

qaerda chiziq Asl satr, boshlang - chiqarilgan ipning boshlanish holati, uzunlik - ajratib olinadigan belgilar soni.

  • O'rta ("abvgdezhziklmn", 4, 5) "ddjz" qatorini qaytaradi;
  • O'rta ("abvgdezhziklmn", 10, 2) "cl" qatorini qaytaradi.
Daqiqa Belgilangan vaqtdagi daqiqalar sonini ifodalovchi butun sonni qaytaradi. Daqiqa ("22:45:15") 45 ni qaytaradi.
Endi Joriy tizim sanasini va vaqtini qaytaradi.
To'g'ri O'tkazilgan satr oxiridan belgilangan belgilar sonini qaytaradi. Funktsiya sintaksisi:

O'ng ( chiziq , uzunlik )

Qaerda chiziq Asl satr va uzunlik Berilgan satr oxiridan ajratib olinadigan belgilar soni.

  • O'ng ("abvgdezhziklmn", 4) "klmn" qatorini qaytaradi;
  • O'ng ("abvgdezhziklmn", 1) "n" qatorini qaytaradi.
Ikkinchi Belgilangan vaqt ichida soniyalar sonini ifodalovchi butun sonni qaytaradi.

Misol: Ikkinchi ("22:45:15") 15. qaytaradi.

Kv Argumentda berilgan raqamli qiymatning kvadrat ildizini qaytaradi.
  • Kvadrat (4) 2 qiymatini qaytaradi;
  • Kvadrat (16) 4 qiymatini qaytaradi.
Vaqt Joriy tizim vaqtini qaytaradi.
Ubound Belgilangan qatorning yuqori satrini qaytaradi.

Eslatma: Ko'p o'lchovli massivlar uchun siz qaysi o'lchov indeksini ixtiyoriy argument sifatida qaytarishingizni belgilashingiz mumkin. Agar ko'rsatilmagan bo'lsa, sukut bo'yicha 1 bo'ladi.

Til bayonotlari (yoki operatorlar) Ba'zi bir harakatlarni amalga oshiradigan yoki ma'lumotlarni tavsiflaydigan dasturiy ta'minot birliklari.

Operator bir yoki bir nechta kalit so'zlarni va ehtimol parametrlarni o'z ichiga oladi. Bir xil dastur satrida joylashgan bir nechta operatorlar bir-biridan ikki nuqta bilan ajralib turadi. Agar bayonot juda uzun bo'lsa, uni o'rash uchun pastki chiziq _ yordamida bir nechta qatorlarga bo'lishingiz mumkin.

HAQIDAp eratoro'zlashtirish

Topshirish operatori dastur bajarilishida o'zgaruvchiga yangi qiymat berish uchun ishlatiladi. Topshiriq belgisi "\u003d".

masalan, operator:

x \u003d Sqr (5 + Tan (1.8) ^ 2)

ifodaning qiymatini x o'zgaruvchiga beradi. O'ng tomonda yozilgan ifodani hisoblash natijasida biz haqiqiy sonni olamiz. Ammo x o'zgaruvchisiga beriladigan qiymat ushbu o'zgaruvchining turi qanday tavsiflanganiga bog'liq. Shunday qilib, agar x o'zgaruvchisi bitta turdagi bo'lsa, unga 4.834464, agar Double bo'lsa, u holda 4.83446368725481 va Integer bo'lsa, 5 natijasi beriladi.

X o'zgaruvchisining ma'lumotlar turi ushbu ifodaning ma'lumotlar turiga mos kelishi kerak. Topshiriq paytida bir turdan ikkinchisiga yashirin konversiyadan tashqari, Visual Basic funktsiyalar yordamida turlarni konvertatsiya qilish imkoniyatini beradi. Masalan, funktsiya CDbl ma'lumotlarni Double turiga o'zgartiradi, CInt - Integer yozish uchun, Clng- Long yozish uchun, CSng - Single yozish uchun, CStr - String turiga va boshqalar.

CInt va Clng funktsiyalari natijani yaxlitlaydi. Bundan tashqari, agar sonning kasr qismi 0,5 ga teng bo'lsa, yaxlitlash eng yaqin juft songa qadar amalga oshiriladi.

Topshiriq operatori nafaqat o'zgaruvchiga qiymat berish, balki VBA ob'ektlarining xossalari qiymatlarini belgilashga ham imkon beradi. Masalan, operator

Qatorlar ("1: 1"). Shrift. Qalin \u003d To'g'ri

varaqning birinchi satrini qalin qilib belgilaydi.

YANGI SATR

Kombinatsiya<Пробел> + <Знак подчеркивания> satr oxirida keyingi satr avvalgisining davomi bo'lishini ta'minlaydi. Shuni esda tutish kerak:

§ Siz chiziqli konstantalarni defis yordamida sindira olmaysiz

§ Xuddi shu qatorni etti tadan ko'paytirishga yo'l qo'yilmaydi

§ Ipning o'zi 1024 belgidan oshmasligi kerak

Misol.

Noto'g'ri uzatish To'g'ri uzatish

String \u003d "Visual Basic for _ String \u003d" Visual Basic "_

Ilovalar "&" Ilovalar uchun "

IZOHLAR

Dasturdagi satr oxirigacha (") belgisidan keyingi matn kompilyator tomonidan e'tiborga olinmaydi va sharh hisoblanadi. Izohlar dasturga tushuntirishlar va tavsiflar qo'shadi. Izohlar dasturni tuzatishda foydalidir: ular disk raskadrovka paytida dastur satrlarini vaqtincha o'chirib qo'yishga imkon beradi.

Shartli operator

Shartli operator shart ifodasi qiymatiga qarab ma'lum ko'rsatmalarni (operatorlarni) bajaradi. Vaziyatni tekshirish uchun blok diagrammasi quyidagicha:

Shakl: 1. Dallanish to'liq bo'lmasligi mumkin (bu struktura traversal deb ham yuritiladi).

Shakl: 2. Shartli operator sintaksisning ikki shakliga ega: chiziqli va blokli.

Kichik shakl

Agar holat Keyin [ operatorlar_if_true]

Shaklda ko'rsatilgan algoritm. 1, kichik shaklda quyidagicha yoziladi

Agar holat Keyin operatorlar_if_true Boshqa operatorlar_if_false

2-rasm yozuvga mos keladi

Agar holat Keyin operatorlar_if_true

3-rasm yozuvga mos keladi

Agar holat Keyin boshqa operatorlar_if_false

Blok shakli

Agar shart-1 Keyin

[operatorlar_if sharti - 1_haqiqat]

[operatorlar_aliq_sozlar_false]]

If va ElseIf qismlarida keltirilgan shartlar relyatsion yoki mantiqiy ifodalardir. Shartlardan biri bajarilganda, tegishli So'ngra kalit so'zidan keyin keltirilgan so'zlar bajariladi va qolgan so'zlar e'tiborsiz qoldiriladi (ya'ni, boshqa tekshiruvlar o'tkazilmaydi va boshqarish End If-dan keyingi bayonotga o'tkaziladi). Agar mantiqiy shartlarning hech biri haqiqiyga teng bo'lmasa, unda operatorlar_olgan barcha_olgan_shartlar_false, yoki agar bu qism o'tkazib yuborilgan bo'lsa, boshqaruv shartli bayonotdan keyin dastur qatoriga o'tkaziladi.

If ifodasining blok shakli quyidagi holatlarda maqul bo'ladi, agar:

Shart bajarilganda yoki bajarilmasa, bir nechta bayonotlar bajariladi (bu holda kichik harfli shakl ham ishlatilishi mumkin, ammo satr juda uzun bo'ladi va dastur unchalik tushunarli emas);

Bir nechta shartlar ketma-ket tekshiriladi va keyingi shart bajarilganda, keyingi shartlarni tekshirish maqsadga muvofiq emas (bu ElseIf kalit so'zi uchun ishlatiladi).

Misol

Firma ulgurji xaridorlarga chegirmalar taqdim etadi.

Buyurtmaning ma'lum hajmiga asoslanib, uning qiymatini aniqlash kerak.

Buyurtmaning narxini hisoblash uchun quyidagi funktsiyadan foydalaning:

Ommaviy funktsiya Order_Price (miqdori ikki baravar)

Agar miqdor<= 999 Then

Order_Price \u003d Miqdor * 5

Agar boshqa bo'lsa<= 1999 Then

Order_value \u003d Miqdor * 4.8

Order_value \u003d Miqdor * 4.75

Bunday holda, IF ifodasining kichik shakli ham ishlatilishi mumkin:

Ommaviy funktsiya Order_Price1 (miqdori) ikki baravar ko'p

Agar miqdor<= 999 Then Стоимость_заказа1 = Количество * 5

Agar Miqdor\u003e \u003d 1000 Va Miqdor bo'lsa<= 1999 Then Стоимость_­ заказа1 = Количество * 4.8

Agar Miqdor\u003e \u003d 2000 bo'lsa, unda Order_value1 \u003d Miqdor * 4.75

Iplarning uzunligi va har qanday buyurtma hajmi uchun kamchiliklardan tashqari, barcha tekshirishlar ketma-ketlikda amalga oshiriladi (birinchi protsedura kichik buyurtma hajmlari bilan tezroq ishlaydi), keyin dastur to'g'ri yoziladi va, ehtimol, hatto ingl.

Shunga qaramay, misollardan biri shartlardan biri bajarilganda (yoki bo'lmaganda), boshqalarni tekshirish imkonsiz bo'lganda keltirish mumkin.

masalan, agar shartlar birgalikda bajarilsa, ba'zi operatorlar bajarilishi kerak: http://po-teme.com.ua/images/adIIIin/image014_e652e49476c6f0eb9cf40b68cc090828.gif "alt \u003d" "width \u003d" 56 "height \u003d" 27 src \u003d "\u003e. Agar operatordan foydalanishni tekshiradi

Agar x\u003e 0 va y bo'lsa

u holda x salbiy bo'lsa, sqr funktsiyasini chaqirishda xato bo'ladi (ildiz ostidagi manfiy son).

Qurilishni ishlatib, ushbu xatoning oldini olish mumkin

Agar x\u003e 0 bo'lsa, u holda y< Sqr(x) Then

Belgilashning oxirgi shaklida, agar Else kalit so'zi mavjud bo'lsa, u oxirgi If iborasini anglatadi.

Tanlash operatori

Case ni tanlang ifoda

[ko'rsatmalar_boshqa]]

Ifoda parametri har qanday raqamli yoki mag'lubiyatli ifoda. Mantiqiy holatni baholash o'rniga, ifoda qiymati parametr bilan belgilangan har bir qiymat bilan taqqoslanadi express_list-n.

Taqqoslash qiymatlari kiritilgan ekspressionlar ro'yxati, quyidagicha ko'rsatilishi mumkin:

- qiymatlar;

- shakldagi qiymatlar oralig'i start_value Kimga oxiri_ qiymati;

- Is shaklidagi taqqoslash iboralari taqqoslash_operator qiymati;

- keltirilgan har qanday iboralar turlarining ro'yxati (ajratuvchi - vergul).

Yo'riqnomada har qanday Case bloklari bo'lishi mumkin. Agar shartlarning hech biri to'g'ri bo'lmasa, u holda Case Else blokidagi gaplar bajariladi.

Masalan, agar shart uchdan yuqori ball bo'lsa, unda bu shartni yozish mumkin: Case 4, 5 yoki Case Is\u003e 3 yoki Case Is\u003e \u003d 4 yoki Case 4 To 5.

Eslatma. Is kalit so'zini qoldirish mumkin, u o'zi qo'shiladi.

Misol

Select Case konstruktsiyasidan foydalangan holda chegirmali narx bilan yuqoridagi misol quyidagi tarzda hal qilinishi mumkin:

Ommaviy funktsiya Order_Price2 (miqdori ikki baravar)

Case miqdorini tanlang

Order_Price2 \u003d Miqdor * 5

1000 dan 1999 yilgacha bo'lgan holat

Order_Price2 \u003d Miqdor * 4.8

Case\u003e \u003d 2000

Order_Price2 \u003d Miqdor * 4.75

Barcha arifmetik, taqqoslash, mantiqiy va birlashtirish operatorlari bu erda batafsil bayon etilgan. Ushbu operatorlar haqida hamma narsani to'plashga harakat qildim. Har bir operatorga misol keltirilgan. Tavsiflarni men VB5 standart yordamidan tarjima qildim.

Arifmetik operatorlar

operator ^ (daraja)

Ushbu operator raqamni quvvat darajasiga ko'tarish uchun mo'ljallangan.

Sintaksis:

natija = raqam^ kuch

Tanlovlar:

natija
raqam
kuch - zarur; har qanday raqamli ifoda

Izohlar:

raqam faqat manfiy bo'lishi mumkin kuch butun son Agar bitta ifodada bir nechta ^ operator ishlatilsa, u holda baholash chapdan o'ngga to'g'ri keladi. Odatda, natija turi Ikki baravar bo'ladi. Ammo, agar yoki kuch, yoki raqam - Nol ifodasi, keyin natija shuningdek Null.

Misol:

Xira MyValue
MyValue \u003d 2 ^ 2 "4 qaytadi.
MyValue \u003d 2 ^ 3 ^ 3 " Qaytariladi 512 (2^3=8, 8^3=512)
MyValue \u003d (-5) ^ 3 " Qaytariladi -125.

Maslahat:

Agar siz raqamni doimiy quvvatga ko'tarishingiz kerak bo'lsa, unda bir nechta operatorlardan foydalanganda yaxshiroq bo'ladi - birdan ko'paytirish - eksponentatsiya, o'zingiz uchun baho bering, iborani hisoblash bilan million o'tish davri:

test1 \u003d 2 ^ 8 "893 ms
test1 \u003d 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 "130ms!

operator * (ko'paytirish)

Ikki raqamni ko'paytirish uchun ishlatiladi.

Sintaksis:

natija = raqam1* №2

Tanlovlar:

natija - talab qilinadi; har qanday raqamli o'zgaruvchi
raqam1 - talab qilinadi; har qanday raqamli ifoda
№2 - talab qilinadi; har qanday raqamli ifoda

Izohlar:

Natijaning ma'lumotlar turi odatda ikkita raqamning eng aniq turi bilan bir xil bo'ladi. Eng yuqori darajadan pastgacha aniqlik tartibi Bayt, Butun son, Uzoq, Yagona, Valyuta, Ikki, o'nlik. To'g'ri, istisnolar mavjud:

  • Agar Yagona va Uzun ko'paytirilsa, natijada Ikki baravar bo'ladi
  • Agar ma'lumotlar turi bo'lsa natija - Long Single yoki Date, bu ifoda natijalariga mos kelmaydi, natijada Double o'z ichiga olgan Variantga aylantiriladi.

Agar a raqam1 yoki №2

Ko'paytirishda aniqlik tartibi qo'shish va ayirishda ishlatilganidan farq qiladi.

Misol:

Xira MyValue
MyValue \u003d 2 * 2 "4 qaytadi.
MyValue \u003d 459.35 * MyValue "(! LANG: 495.35 * 4 qaytaradi

operator / (bo'linma)

Ikki raqamni bo'lish va suzuvchi nuqta natijasini olish uchun ishlatiladi.

Sintaksis:

natija = raqam1 / №2

Tanlovlar:

natija - talab qilinadi; har qanday raqamli o'zgaruvchi
raqam1 - talab qilinadi; har qanday raqamli ifoda
№2 - talab qilinadi; har qanday raqamli ifoda

Izohlar:

Natijaodatda Double tipidagi. To'g'ri, istisnolar mavjud:

  • Agar har ikkala ifoda ifodasi Byte, Integer, Single turida bo'lsa, unda natija Single bo'ladi. Biroq, ifoda Yagona ramkaga to'g'ri kelmasa, xato bo'ladi.
  • Agar ifodaning har ikkala ifodasi Bayt, Integer yoki Single ni o'z ichiga olgan Variant turiga kirsa, natijada Single Variant bo'ladi. Ammo, agar ifodaning o'lchamlari Yagona raqamga to'g'ri kelmasa, u holda Ikki Variant.
  • Agar raqamlardan biri o'nli turdagi bo'lsa, unda natija ham o'nlik bo'ladi.

Agar a raqam1 yoki №2 - Null, keyin bu oddiy 0 deb talqin etiladi.

Misollar:

Xira MyValue
MyValue \u003d 10/4" !} Qaytariladi 2.5.
MyValue \u003d 10/3 " Qaytariladi 3.333333.

operator \\ (butun sonli bo‘linma)

Ikki raqamni ajratish va butun son natijasini olish uchun ishlatiladi.

Sintaksis:

natija = raqam1 \ №2

Tanlovlar:

natija - talab qilinadi; har qanday raqamli o'zgaruvchi
raqam1 - talab qilinadi; har qanday raqamli ifoda
№2 - talab qilinadi; har qanday raqamli ifoda

Izohlar:

Bunday bo'linishdan oldin iboralar Bayt, Integer yoki Long ifodalariga yaxlitlanadi. Odatda natija ma'lumotlarining turi Bayt, Bayt varianti, Integer, Integer varianti, Long yoki Long variantidir. Har qanday kasr qismi qisqartiriladi.

Ammo, agar biron bir ibora Null bo'lsa, unda null bo'ladi. Bo'shni o'z ichiga olgan har qanday ifoda 0 deb talqin qilinadi.

Misollar:

Xira MyValue
MyValue \u003d 11 \\ 4 " Qaytariladi 2.
MyValue \u003d 9 \\ 3 " Qaytariladi 3.
MyValue \u003d 100 \\ 3 " Qaytariladi 33.

operatori Mod (bo'linishning qolgan qismi)

Ikki raqamni bo'lish va ularning bo'linishining qolgan qismini olish uchun ishlatiladi.

Sintaksis:

natija = raqam1 Tartibni №2

Tanlovlar:

natija - talab qilinadi; har qanday raqamli o'zgaruvchi
raqam1 - talab qilinadi; har qanday raqamli ifoda
№2 - talab qilinadi; har qanday raqamli ifoda

Izohlar:

Bo'linishda o'ng nuqta bo'lgan raqamlar yaxlitlanadi. Masalan, quyidagi ifodaning natijasi 5 ga teng:

A \u003d 19 Tartib 6.7

Bu erda nima bo'layapti? Birinchidan, 6.7 raqami 7 ga yaxlitlanadi. Keyin bo'linish sodir bo'ladi, biz 2.7 ga erishamiz .... Bo'lishning qolgan qismi \u003d 5. (2 * 7 \u003d 14, 19 - 14 \u003d 5).

Natijada odatda Byte, Byte variant, Integer, Integer variant, Long yoki Long o'z ichiga olgan Variant turiga kiradi.

Agar biron bir ibora Null bo'lsa, natijada Null bo'ladi. Bo'shni o'z ichiga olgan har qanday ifoda 0 deb talqin qilinadi.

Misollar:

Xira MyResult
MyResult \u003d 10 mod 5 " Qaytariladi 0.
MyResult \u003d 10 mod 3 " Qaytariladi 1.
MyResult \u003d 12 Tartibni 4.3 " Qaytariladi 0.
MyResult \u003d 12.6 mod 5 " Qaytariladi 3.

operator + (qo'shimcha)

Ikki raqamni qo'shish uchun ishlatiladi.

Sintaksis:

natija = ifoda1+ ifoda2

Tanlovlar:

natija - talab qilinadi; har qanday raqamli o'zgaruvchi
ifoda1
ifoda2 - talab qilinadi; har qanday ifoda

Izohlar:

+ Operatoridan foydalanganda, nima bo'lishini, qo'shish yoki qatorni birlashtirishni aniqlay olmaysiz. Chalkashmaslik va kodingizni yanada o'qiy olish uchun birlashtirish uchun & operatoridan foydalaning.

Agar iboralardan biri Variant bo'lmasa, unda quyidagi qoidalar qo'llaniladi:

  • Agar har ikkala ifoda ham sonli tipda bo'lsa (Bayt, Boolean, Integer, Long, Single, Double, Date, Currency, and Decimal), ular qo'shiladi.
  • Agar ikkala ibora ham mag'lubiyat bo'lsa - birikma.
  • Agar iboralardan biri raqamli turga, ikkinchisi esa har qanday Variant qiymatiga, shu jumladan Null bo'lsa, unda qo'shimcha paydo bo'ladi.
  • Agar iboralardan biri mag'lubiyatga, ikkinchisi esa har qanday Variant qiymatiga ega bo'lsa, unda birikma paydo bo'ladi.
  • Agar iboralardan birida Bo'sh bo'lsa, unda ikkinchi, o'zgarmagan ifoda qaytariladi.
  • Agar iboralardan biri raqamli, ikkinchisi esa satr bo'lsa, Type matchatch xatosi paydo bo'ladi.
  • Agar biron bir ifoda Null bo'lsa, unda natija ham Null bo'ladi.

Agar ikkala ibora ham Variant bo'lsa, unda quyidagi qoidalar qo'llaniladi:

  • Agar ikkala ibora ham raqamlar bo'lsa, unda ular qo'shiladi.
  • Agar ikkala ibora ham satr bo'lsa, unda ular birlashtiriladi.
  • Agar iboralardan biri raqam bo'lsa, ikkinchisi satr bo'lsa, qo'shimcha paydo bo'ladi.

Oddiy qo'shimcha uchun, natijada ma'lumotlar turi odatda ikkita raqamning eng aniq turi bilan bir xil bo'ladi. Aniqlik tartibi Bayt, Butun son, Uzoq, Yagona, Ikki, Valyuta va o'nlik. Istisnolar mavjud:

  • Agar Yagona va Uzun qo'shilsa, natijada Ikki barobar bo'ladi
  • Agar Sana turidagi ifoda, boshqa har qanday ifoda bilan qo'shilsa, natijada Sana bo'ladi.

Agar bir yoki ikkala ibora Null bo'lsa, unda natija ham Null bo'ladi. Agar ikkala iborada bo'sh bo'lsa, natijada Integer bo'ladi. Agar bittasi bo'lsa, natijada o'zgarmagan ikkinchi ifoda qaytariladi.

Misollar:

Xira MyNumber, Var1, Var2
MyNumber \u003d 2 + 2 " Qaytariladi 4.
MyNumber \u003d 4257.04 + 98112 " Qaytariladi 102369.04.

Var1 \u003d "34"
Var2 \u003d 6 "Aralash o'zgaruvchilarni boshlang
MyNumber \u003d Var1 + Var2 " Qaytariladi 40.

Var1 \u003d "34"
Var2 \u003d "6" "O'zgaruvchilarni satrlar bilan boshlash
MyNumber \u003d Var1 + Var2 " Qaytariladi "346" (sodir bo'ldi
"birlashma, qo'shimcha emas!).

Maslahat:

Qo'shish operatori (+) sana qo'shish uchun ishlatilishi mumkin, ya'ni. sana turidagi o'zgaruvchilar:

Dim d Sana sifatida
d \u003d DateSerial (2002, 8, 15) "sana ishga tushirilishi 15.08.2002
d \u003d d + 15 "endi d 30.08.2002 yilni o'z ichiga oladi
"ya'ni biz 15 kun qo'shdik

operator - (ayirish, belgini o'zgartirish)

Ikkala raqam o'rtasidagi farqni topish uchun yoki ifoda belgisini o'zgartirish uchun ishlatiladi.

Sintaksis:

natija = ifoda1- ifoda2

- tushuntirish

Tanlovlar:

natija - talab qilinadi; har qanday raqamli o'zgaruvchi
ifoda - talab qilinadi; har qanday ifoda
ifoda1 - talab qilinadi; har qanday ifoda
ifoda2 - talab qilinadi; har qanday ifoda

Izohlar:

Birinchi sintaksisda ikkita raqam orasidagi farqni topish uchun "-" operatori kerak. Ikkinchi sintaksisda "-" belgisi belgisini o'zgartirish uchun ishlatiladi iboralar.

Natijaning ma'lumotlar turi odatda ikkita raqamning eng aniq turi bilan bir xil bo'ladi. Aniqlik tartibi Bayt, Butun son, Uzoq, Yagona, Ikki, Valyuta va o'nlik. Istisnolar mavjud:

  • Agar ayirboshlashda Single va Long turlari qatnashsa, natijada Double bo'ladi
  • Agar ayirboshlashda Sana ifodasi ishlatilsa,
    natijada Sana bo'ladi.
  • Ikki sanani olib tashlasak, Double hosil bo'ladi.

Agar bir yoki ikkala ibora Null bo'lsa, unda natija ham Null bo'ladi. Agar iboralardan biri Bo'sh bo'lsa, u holda 0 deb talqin qilinadi.

Qo'shish va ayirishning aniqligi tartibi ko'paytishda ishlatilganidan farq qiladi.

Misollar:

Xira MyResult
MyResult \u003d 4 - 2 " Qaytariladi 2.
MyResult \u003d 459.35 - 334.90 " Qaytariladi 124.45.

Maslahat:

Qo'shish operatori singari, ayirboshlash operatoridan ham ikki sana o'rtasidagi farqni (kunlarda) hisoblash uchun foydalanish mumkin:

Dim d1 Sana sifatida
Dim d2 sana sifatida
Dim razn As Long
d1 \u003d DateSerial (1983, 10, 14)
d2 \u003d DateSerial (2002, 8, 15)
razn \u003d d2 - d1 "kunlardagi farq (6880).

Taqqoslash operatorlari

Ba'zi iboralarni taqqoslash uchun ishlatiladi. Ular uchta sintaksisga ega:

Sintaksis:

natija = ifoda1 taqqoslash operatori ifoda2
natija = ob'ekt1 Shunday ob'ekt2
natija = chiziq Yoqdi namuna

Tanlovlar:

natija zarur; har qanday raqamli o'zgaruvchi
ifoda zarur; har qanday ifoda
taqqoslash operatori zarur; har qanday taqqoslash operatori
ob'ekt zarur; har qanday ob'ektning nomi
chiziq zarur; har qanday mag'lubiyat ifodasi.
namuna zarur; har qanday satr ifodasi yoki harflar va raqamlar qatori

Izohlar:

Quyidagi jadvalda taqqoslash operatorlari ro'yxati va ifoda natijasini aniqlaydigan shartlar (To'g'ri yoki Yolg'on) keltirilgan.

Operator

Agar shunday bo'lsa, to'g'ri

Agar noto'g'ri bo'lsa

Agar yo'q bo'lsa

< (меньше чем) ifoda1 <
ifoda2
ifoda1 >=
ifoda2

bir narsa
ning
ifodalarda Null mavjud

<= (меньше или равно) ifoda1 <=
ifoda2
ifoda1 >
ifoda2
\u003e (katta) ifoda1 >
ifoda2
ifoda1 <=
ifoda2
\u003e \u003d (katta yoki teng) ifoda1 >=
ifoda2
ifoda1 <
ifoda2
\u003d (teng) ifoda1 =
ifoda2
ifoda1 <>
ifoda2
<> (teng emas) ifoda1 <>
ifoda2
ifoda1 =
ifoda2

Is va Like operatorlari aniq funktsiyalarni bajaradilar va ularning taqqoslash jadvali quyida ko'rsatilganidan farq qiladi (biz ularni quyida ko'rib chiqamiz).

Ikki ifodani taqqoslaganda taqqoslash raqam yoki satr bo'lishini har doim ham aniqlab bo'lmaydi. Quyidagi ikkala ibora ham Variantdan boshqa turdagi bo'lsa, natija qanday hisoblanishini ko'rsatadi:

  • Agar ikkala ifoda ham raqamlar (Bayt, Boolean, Integer, Long, Single, Double, Date, Currency, or Decimal) bo'lsa, u holda raqamlar taqqoslanadi.
  • Agar ikkala ibora ham satr bo'lsa, unda satrlar taqqoslanadi. (kichikroq chiziq - bu birinchi va keyingi harflari kichikroq ascii kodiga ega bo'lgan chiziq).
  • Agar iboralardan biri raqam bo'lsa, ikkinchisi Variant bo'lsa, uni raqam sifatida talqin qilish mumkin bo'lsa, unda raqamlar taqqoslanadi.
  • Agar iboralardan biri raqam bo'lsa, ikkinchisi son sifatida talqin qilinmaydigan Variant qatori bo'lsa, unda xato yuzaga keladi (Type matchatch).
  • Agar iboralardan biri mag'lubiyatga, ikkinchisi esa har qanday Variant qiymatiga (hattoki Null) teng bo'lsa, unda satrlarni taqqoslash sodir bo'ladi.
  • Agar iboralardan biri bo'sh bo'lsa, ikkinchisi raqam bo'lsa, unda raqamlarni taqqoslash amalga oshiriladi, bu erda bo'sh joy 0 ga teng.
  • Agar iboralardan biri bo'sh bo'lsa, ikkinchisi satr bo'lsa, unda satrlarni taqqoslash amalga oshiriladi, bu erda bo'sh bo'sh satr "" sifatida ko'rib chiqiladi.

Agar ikkala birinchi va ikkinchi variant Variant turiga kirsa, u holda Variant tarkibidagi ma'lumotlar turlari bo'yicha ifodalar taqqoslanadi:

  • Agar ikkala Variant ifodasida ham raqamlar bo'lsa, unda raqamlar taqqoslanadi.
  • Agar ikkala Variant ifodasida ham qatorlar bo'lsa, unda satrlar taqqoslanadi.
  • Agar Variant ifodalarining birida raqam, ikkinchisida qator bo'lsa, unda sonli ifoda satr ifodasidan kam bo'ladi.
  • Agar Variant ifodalaridan biri bo'sh bo'lsa, ikkinchisi raqam bo'lsa, u holda bo'sh 0 ga teng bo'ladi.
  • Agar Variant ifodalaridan biri bo'sh bo'lsa, ikkinchisi satr bo'lsa, u holda bo'sh bo'sh satr "" sifatida qabul qilinadi.
  • Agar ikkala ibora ham Bo'sh bo'lsa, unda ular teng deb hisoblanadi.

Yagona o'zgaruvchini dubl bilan taqqoslaganda, dublyor yakkalikning aniqligiga yaxlitlanadi.

Agar Valyutani bitta yoki ikki marta solishtirilsa, unda bitta yoki ikki kishilik valyutaga aylantiriladi. Xuddi shu tarzda, o'nlikni bitta yoki ikkilamchi bilan taqqoslaganda, bitta yoki juftlik o'nlikka aylanadi. Valyuta uchun .0001 dan kam bo'lgan har qanday kasr qismi yo'qolishi mumkin. Decimal uchun qiymat 1E-28 ga teng yoki xato bo'lishi mumkin. Shunday qilib, agar kasr qismi yo'qolsa, iboralarni teng deb talqin qilish mumkin, garchi aslida biri ikkinchisidan farq qiladi. (ozgina bo'lsa ham).

Misollar:

Xira MyResult, Var1, Var2
MyResult \u003d (45< 35) " Qaytariladi Yolg'on.
MyResult \u003d (45 \u003d 45) " Qaytariladi To'g'ri.
MyResult \u003d (4<> 3) " Qaytariladi To'g'ri.
MyResult \u003d ("5"\u003e "4") " Qaytariladi To'g'ri.

Var1 \u003d "5": Var2 \u003d 4 "VB-da siz yo'g'on ichakdan foydalanishingiz mumkin,
"operatorlarni ajratish uchun.

MyResult \u003d (Var1\u003e Var2) " Qaytariladi To'g'ri.

Var1 \u003d 5: Var2 \u003d Bo'sh
MyResult \u003d (Var1\u003e Var2) " Qaytariladi To'g'ri.

Var1 \u003d 0: Var2 \u003d Bo'sh
MyResult \u003d (Var1 \u003d Var2) " Qaytariladi To'g'ri.

taqqoslash operatori Is

Ushbu operator ob'ekt o'zgaruvchilarini solishtirish uchun ishlatiladi.

Ushbu operator uchun sintaksis yuqorida ko'rsatilgan.

Izohlar:

Agar object1 va object1 bir xil ob'ektga murojaat qilsa, unda natija To'g'ri, aks holda False bo'ladi. Ikkita o'zgaruvchi bir xil ob'ektga bir nechta usulda murojaat qilishi mumkin. Quyidagi misolda A B bilan bir xil ob'ektga ishora qiladi:

A \u003d B ni o'rnating

Quyidagi misol A va B o'zgaruvchilar bir xil ob'ektga - C ga murojaat qilishi uchun shunday qiladi:

A \u003d C ni o'rnating
B \u003d C ni o'rnating

Misollar:

Xira MyObject, YourObject, ThisObject, _
OtherObject, ThatObject, MyCheck

YourObject \u003d MyObject-ni o'rnating "ob'ektlarga havolalar yaratish
ThisObject \u003d MyObject-ni o'rnating
ThatObject \u003d OtherObject-ni o'rnating
MyCheck \u003d YourObject Is thisObject "Haqiqiy bo'ladi.
MyCheck \u003d ThatObject Is thisObject "False qaytadi.
"Biz MyObject deb o'ylaymiz<> Boshqalar ob'ekti
MyCheck \u003d MyObject IsOOject "Noto'g'ri qaytadi.

qator taqqoslash operatori - Like

Satrlarni taqqoslash uchun Like string taqqoslash operatori ishlatiladi.

Ushbu operator uchun sintaksis allaqachon yuqorida muhokama qilingan.

Izoh:

Ushbu operator String-ni Pattern-ga qarshi sinash uchun ishlatilishi mumkin. Bu Perl-dagi oddiy iboralarga deyarli o'xshash juda kuchli operator.

Shunday qilib, ushbu operator quyidagi tarzda ishlaydi. Agar ip niqobga to'g'ri keladigan bo'lsa, unda natija To'g'ri bo'ladi. Agar yo'q bo'lsa, yolg'on. Agar ifodalardan biri Null bo'lsa, natija ham Null bo'ladi.

Like operatorining harakati sukut bo'yicha taqqoslash turiga bog'liq. (Variantni taqqoslash bayonoti).

Agar Ikkilik turi o'rnatilgan bo'lsa (ya'ni ikkilik taqqoslash) bo'lsa, unda satrlar ularning Ascii kodlariga ko'ra taqqoslanadi (u har xil kodlashda har xil). Ushbu ketma-ketlik odatda ishlatiladi:

A< B < E < Z < a < b < e < z < А < К < Я < а < к < я

Agar tur Matnga o'rnatilgan bo'lsa (matnni taqqoslash). Ushbu taqqoslash bilan ketma-ketlik avvalgisidan farq qiladi, bu erda yuqori va pastki harflar teng:

(A \u003d a)< (А=а) < (B=b) < (E=e) < (К=к) < (Z=z) < (Я=я)

Like operatorining eng muhim vazifasi - satrning niqobga tegishli ekanligini tekshirish. Maskada quyidagi maxsus narsalardan foydalanish mumkin. belgilar:

Har qanday bitta belgi
* Nolinchi yoki undan ko'p belgilar
# Har qanday raqam (0-9).
Charllistda ko'rinadigan har qanday bitta belgi
[! charlist] charlistga kiritilmagan har qanday bitta belgi

Mana tezkor eslatma. Maxsus o'z ichiga olgan niqobdagi chiziqning tegishli ekanligini tekshirish uchun. belgilar (ya'ni tekshiring, masalan, agar qatorda [,?, #,], * belgilar mavjud bo'lsa), ularni to'rtburchak qavslar ichiga kiritishingiz kerak. Siz shunchaki alohida qavs [yoki] qo'yish mumkin emas.

Belgilar ro'yxatini belgilashda siz chiziqcha (-) dan foydalanishingiz mumkin. Masalan, A dan Z gacha ketma-ketlikni bajarish uchun siz niqobdan foydalanasiz. Qavs ichidagi hamma narsada hech qanday ajratuvchi bo'lmasligi kerak (bo'shliqlar, vergullar va boshqalar), aks holda ular ketma-ketlikka qo'shiladi.

Niqobni tekshirish uchun boshqa muhim qoidalar mavjud:

  • Belgilar ro'yxati boshidagi (!) belgisi ushbu ro'yxatga kiritilmagan belgilarni izlash kerakligini ko'rsatadi. Agar siz o'zingizni topishingiz kerak bo'lsa! Signning o'zi, siz qavslarni qo'yishingiz kerak [!].
  • (-) belgilar qatorini belgilash uchun ishlatiladi.
  • Belgilar oralig'i ko'rsatilganida, u ASCII ko'tarilishi kerak. O'sha. to'g'ri niqob, emas.
  • Ketma-ketlik "" bo'sh satr sifatida talqin etiladi.

Misollar:

Xira MyCheck
MyCheck \u003d "aBBBa" Like "a * a" "True return.
MyCheck \u003d "F" Like "" "True qaytib keladi.
MyCheck \u003d "F" Like "[! A-Z]" "Noto'g'ri qaytadi.
MyCheck \u003d "a2a" Like "a # a" "True return.
MyCheck \u003d "aM5b" Like "a # [! C-e]" "True return.
MyCheck \u003d "BAT123khg" Like "B? T *" "True will return.
MyCheck \u003d "CAT123khg" Like "B? T *" "Noto'g'ri qaytadi.

myString \u003d "312T-87GD-8922"

Agar myString bo'lsa "### - ## - ####" kabi ... Keyin ...

Iplarni birlashtirish operatorlari

Aslida Visual Basic-da satrlarni birlashtirish uchun faqat 2 ta operatordan foydalanishingiz mumkin. Ular & va +. + Operatori yuqorida tavsiflangan. & Operatori haqida gaplashamiz.

mag'lubiyatni birlashtirish operatori - &

Ikki iborani birlashtirish uchun ishlatiladi.

Sintaksis:

natija = ifoda1 & ifoda2

natija zarur; Har qanday String yoki Variant o'zgaruvchisi
ifoda1 zarur; Har qanday ifoda
ifoda2 zarur; Har qanday ifoda

Izohlar:

Agar ifoda satr bo'lmasa, u String Variantiga aylantiriladi. Natijada har ikkala ibora ham String turida ma'lumotlar turi String bo'ladi. Aks holda, natija String Variant bo'ladi. Agar ikkala ibora ham Null bo'lsa, unda natija ham Null bo'ladi. Ammo, agar iboralardan faqat bittasida Null qiymati bo'lsa, u holda bo'sh satr "" sifatida talqin etiladi. Bo'sh bo'shliq "" qatori sifatida ham talqin etiladi.

Misollar:

Xira MyStr
MyStr \u003d "Salom" va "Dunyo"
" Qaytariladi "Salom Dunyo" qatori.
MyStr \u003d "CHECK" & 123 & "CHECK"
"" CHECK 123 CHECK "qatorini qaytaradi.

Mantiqiy operatorlar

Bu operator tomonidan eng qiziqarli guruh. Dasturlash paytida ularning qanday ishlashini va qanday ishlatilishini bilishingiz kerak (va nafaqat Visual Basic-da).

Visual Basic-da ulardan 6 tasi mavjud. Keling, har bir operatorni batafsil ko'rib chiqaylik.

Va operator

Ikki ifodada mantiqiy ko'paytirishni amalga oshirish uchun foydalaniladi.

Sintaksis:

natija = ifoda1 Va ifoda2

natija
ifoda1 zarur; Har qanday ifoda
ifoda2 zarur; Har qanday ifoda

Izohlar:

And operatori qanday ishlashini quyidagi jadvalda keltirilgan:

Agar ifoda1 \u003d

va ifoda2 \u003d

Natijada \u003d

To'g'ri To'g'ri To'g'ri
To'g'ri Yolg'on Yolg'on
To'g'ri Bekor Bekor
Yolg'on To'g'ri Yolg'on
Yolg'on Yolg'on Yolg'on
Yolg'on Bekor Yolg'on
Bekor To'g'ri Bekor
Bekor Yolg'on Yolg'on
Bekor Bekor Bekor

Va operatori sonning bitlarini sinash uchun ham ishlatiladi. Bitlar uchun And operatori quyidagicha ishlaydi (chapdan o'ngga qarang)

0 0 0
0 1 0
1 0 0
1 1 1

Misollar:

Xira A, B, C, D, MyCheck
MyCheck \u003d A\u003e B Va B\u003e C " Qaytariladi To'g'ri.
MyCheck \u003d B\u003e A Va B\u003e C " Qaytariladi Yolg'on.
MyCheck \u003d A\u003e B Va B\u003e D " Qaytariladi Bekor
MyCheck \u003d A va B " Qaytariladi 8 (bitli taqqoslash).

So'nggi misolni batafsil ko'rib chiqamiz. 10 raqami bit sifatida quyidagicha ifodalanadi (tetrad, ya'ni 4 bit):

Va 8 raqami quyidagicha:

Va operatori natijasida yuqoridagi jadvalga binoan quyidagilarga erishamiz.

O'sha. 8. Nega biz buni qildik? Biz buni A sonining to'rtinchi biti o'rnatilganligini tekshirish uchun qildikmi? B ni olganimizda, ushbu bit o'rnatilganligiga ishonch hosil qildik.

Yoki operator

Ikki iborani mantiqiy qo'shishni bajarish uchun ishlatiladi.

Sintaksis:

natija = ifoda1 Yoki ifoda2

natija zarur; Har qanday raqamli (shu jumladan, mantiqiy) o'zgaruvchi
ifoda1 zarur; Har qanday ifoda
ifoda2 zarur; Har qanday ifoda

Izohlar:

Quyidagi jadval Or operatorining qanday ishlashini ko'rsatadi:

Agar ifoda1 \u003d

va ifoda2 \u003d

Natijada \u003d

To'g'ri To'g'ri To'g'ri
To'g'ri Yolg'on To'g'ri
To'g'ri Bekor To'g'ri
Yolg'on To'g'ri To'g'ri
Yolg'on Yolg'on Yolg'on
Yolg'on Bekor Bekor
Bekor To'g'ri To'g'ri
Bekor Yolg'on Bekor
Bekor Bekor Bekor

Or operatori sonning ma'lum bitlarini o'rnatish uchun ishlatiladi. Bitlar uchun Or operatori quyidagicha ishlaydi (chapdan o'ngga qarang)

0 0 0
0 1 1
1 0 1
1 1 1

Natija qalin.

Misollar:

Xira A, B, C, D, MyCheck
MyCheck \u003d A\u003e B yoki B\u003e C " Qaytariladi To'g'ri.
MyCheck \u003d B\u003e A Yoki B\u003e C " Qaytariladi To'g'ri.
MyCheck \u003d A\u003e B yoki B\u003e D " Qaytariladi To'g'ri.
MyCheck \u003d B\u003e D Yoki B\u003e A " Qaytariladi Bekor
MyCheck \u003d A yoki 5 " Qaytariladi 15:

So'nggi misolni batafsil ko'rib chiqamiz. 10 raqami quyidagi tarzda bit sifatida ifodalanadi (tetrad, ya'ni 4 bit):

Va 5 raqami:

Or operatorining ishlashi natijasida yuqoridagi jadvalga binoan quyidagilarga erishamiz.

O'sha. 15. Ko'rib turganingizdek, Or operatori nafaqat taqqoslash ifodalarida, balki sonning ma'lum bitlarini o'rnatishda ham juda oson va qulaydir.

Xor operatori

Ikki iborani mantiqiy inkor qilish uchun foydalaniladi.

Sintaksis:

natija = ifoda1 Xor ifoda2

natija zarur; Har qanday raqamli (shu jumladan, mantiqiy) o'zgaruvchi
ifoda1 zarur; Har qanday ifoda
ifoda2 zarur; Har qanday ifoda

Izohlar:

Xor operatori qanday ishlashini quyidagi jadvalda keltirilgan:

Xor operatori sonning ma'lum bitlarini teskari aylantirish uchun ishlatiladi. Bitlar uchun Xor operatori quyidagicha ishlaydi (chapdan o'ngga qarang)

0 0 0
0 1 1
1 0 1
1 1 0

Natija qalin. Xor Ordan farq qiladi, faqat shuki, ikkala bit bit bo'lganda, Xor 0 hosil qiladi. Xor operatori o'zining xususiyati bilan qiziq, lekin ikki marta ishlatilganda u bir xil sonni hosil qiladi. Bu ko'pincha kriptografiyada qo'llaniladi.

Misollar:

Xira A, B, C, D, MyCheck
A \u003d 10: B \u003d 8: C \u003d 6: D \u003d Null
MyCheck \u003d A\u003e B Xor B\u003e C " Qaytariladi Yolg'on.
MyCheck \u003d B\u003e A Xor B\u003e C " Qaytariladi To'g'ri.
MyCheck \u003d B\u003e A Xor C\u003e B " Qaytariladi Yolg'on.
MyCheck \u003d B\u003e D Xor A\u003e B " Qaytariladi Bekor
MyCheck \u003d A Xor B " Qaytariladi 2

Xor operatoridan foydalanishning qiziqarli misoli ikkita raqamli o'zgaruvchining qiymatlarini almashtirishdir:

Dim a As Long, b As Long
a \u003d 4
b \u003d 7
a \u003d a Xor b
b \u003d a Xor b
a \u003d a Xor b

Endi a o'zgaruvchisi b o'zgaruvchining qiymatini o'z ichiga oladi va aksincha.

operator emas

Ikki iborani mantiqiy inversiyasini bajarish uchun ishlatiladi.

Sintaksis:

natija \u003d Yo'q ifoda

natija zarur; Har qanday raqamli (shu jumladan, mantiqiy) o'zgaruvchi
ifoda zarur; Har qanday ifoda

Izohlar:

Not operatori qanday ishlashini quyidagi jadvalda keltirilgan:

Not operatori barcha bitlarni teskari aylantiradi iboralar.Bit operatori uchun Not operatori quyidagicha ishlaydi (chapdan o'ngga qarang):

0 1
1 0

Natija qalin.

Misollar:

Xira A, B, C, D, MyCheck
A \u003d 10: B \u003d 8: C \u003d 6: D \u003d Null
MyCheck \u003d Not (A\u003e B) " Qaytariladi Yolg'on.
MyCheck \u003d Not (B\u003e A) " Qaytariladi To'g'ri.
MyCheck \u003d Yo'q (C\u003e D) " Qaytariladi Bekor
MyCheck \u003d A emas " Qaytariladi -11 (barcha bitlar teskari)

So'nggi misolni batafsil ko'rib chiqaylik. 10 raqami bit sifatida quyidagicha ifodalanadi (bayt, ya'ni 8 bit):

Barcha bitlarni teskari aylantirgandan so'ng biz quyidagilarni olamiz:

Va bu -11.

operator Eqv

Ikki ifodaning mantiqiy ekvivalentligini bajarish uchun foydalaniladi.

Sintaksis:

natija = ifoda1 Ekv ifoda2

natija zarur; Har qanday raqamli (shu jumladan, mantiqiy) o'zgaruvchi
ifoda1 zarur; Har qanday ifoda
ifoda2 zarur; Har qanday ifoda

Izohlar:

Eqv operatori qanday ishlashini quyidagi jadvalda keltirilgan:

Bitlar uchun Eqv operatori quyidagicha ishlaydi (chapdan o'ngga qarang)

0 0 1
0 1 0
1 0 0
1 1 1

Misollar:

Xira A, B, C, D, MyCheck
A \u003d 10: B \u003d 8: C \u003d 6: D \u003d Null
MyCheck \u003d A\u003e B tenglama B\u003e C " Qaytariladi To'g'ri.
MyCheck \u003d B\u003e A tenglama B\u003e C " Qaytariladi Yolg'on.
MyCheck \u003d A\u003e B tenglama B\u003e D " Qaytariladi Bekor
MyCheck \u003d A tenglama B " Qaytariladi -3

Imp operatori

Ikki iborani mantiqiy xulosasini chiqarish uchun ishlatiladi.

Sintaksis:

natija = ifoda1 Imp ifoda2

natija zarur; Har qanday raqamli (shu jumladan, mantiqiy) o'zgaruvchi
ifoda1 zarur; Har qanday ifoda
ifoda2 zarur; Har qanday ifoda

Izohlar:

Imp operatori qanday ishlashini quyidagi jadvalda keltirilgan:

Agar ifoda1 \u003d

va ifoda2 \u003d

Natijada \u003d

To'g'ri To'g'ri To'g'ri
To'g'ri Yolg'on Yolg'on
To'g'ri Bekor Bekor
Yolg'on To'g'ri To'g'ri
Yolg'on Yolg'on To'g'ri
Yolg'on Bekor To'g'ri
Bekor To'g'ri To'g'ri
Bekor Yolg'on Bekor
Bekor Bekor Bekor

Bitlar uchun Imp operatori quyidagicha ishlaydi (chapdan o'ngga qarang)

0 0 1
0 1 1
1 0 0
1 1 1

Misollar:

Xira A, B, C, D, MyCheck
A \u003d 10: B \u003d 8: C \u003d 6: D \u003d Null
MyCheck \u003d A\u003e B Imp B\u003e C " Qaytariladi To'g'ri.
MyCheck \u003d A\u003e B Imp C\u003e B " Qaytariladi Yolg'on.
MyCheck \u003d B\u003e A Imp C\u003e B " Qaytariladi To'g'ri.
MyCheck \u003d B\u003e A Imp C\u003e D " Qaytariladi To'g'ri.
MyCheck \u003d C\u003e D Imp B\u003e A " Qaytariladi Bekor
MyCheck \u003d B Imp A " Qaytadi -1

imzo ism Tavsif
= Teng Agar chap va o'ng operandlar teng bo'lsa, True qaytaradi. E'tibor bering, bu tayinlash operatorining haddan tashqari yuklanishi.
<> Teng emas Agar chap va o'ng operandlar teng bo'lmasa, True qaytaradi.
> Ko'ra yaxshiroq Agar chap operand o'ng operanddan kattaroq bo'lsa, True-ni qaytaradi.
< Dan kichik; .. dan kamroq Chap operand o'ng operanddan kichik bo'lsa, True qaytaradi.
>= Ko'proq yoki teng Agar chap operand o'ng operanddan katta yoki unga teng bo'lsa, True qaytaradi.
<= Kam yoki teng Chap operand o'ng operanddan kichik yoki unga teng bo'lsa, True qaytaradi.
Shunday Malumot kapitali Agar chap ob'ektga havola o'ng ob'ektga murojaat bilan bir xil misol bo'lsa, "True" qiymatini qaytaradi. Bundan tashqari, uni ikkala tomonda Nothing (null object reference) bilan ishlatish mumkin. Eslatma. Is operatori taqqoslashni amalga oshirishdan oldin ikkala operandni Ob'ektga majburlashga urinadi. Agar ikkala tomon ibtidoiy tur bo'lsa yoki Ob'ektni o'z ichiga olmagan Variant (yoki ob'ektiv bo'lmagan subtip yoki vtEmpty), taqqoslash natijasida ish vaqtida xato 424 - "Ob'ekt talab qilinadi". Agar biron bir operand boshqasiga tegishli bo'lsa interfeys xuddi shu ob'ekt, taqqoslash True ga qaytadi. Ikkala misolning ham haqiqiyligini tekshirish kerak bo'lsa, shuning uchun va interfeysi, ObjPtr (chapda) \u003d ObjPtr (o'ngda) ObjPtr (chapda) \u003d ObjPtr (o'ngda) dan foydalaning.

Izohlar

VBA sintaksisi taqqoslash operatorlarini zanjirga qo'yishga imkon beradi, ammo umuman olganda bu konstruktsiyalardan qochish kerak. Taqqoslash har doim chapdan o'ngga bir vaqtning o'zida atigi 2 ta operanda bajariladi va har bir taqqoslash mantiqiy natijaga olib keladi. Masalan, ... ifodasi

A \u003d 2: b \u003d 1: c \u003d 0 expr \u003d a\u003e b\u003e c

Ba'zi bir kontekstlarda b ning a va c orasida ekanligini tekshirish uchun o'qish mumkin. VBA-da bu quyidagicha baholanadi:

A \u003d 2: b \u003d 1: c \u003d 0 expr \u003d a\u003e b\u003e c expr \u003d (2\u003e 1)\u003e 0 expr \u003d True\u003e 0 expr \u003d -1\u003e 0 "CInt (True) \u003d -1 expr \u003d False

Operand sifatida Object bilan ishlatilgandan boshqa har qanday taqqoslash operatori Ob'ektning standart a'zosining qaytish qiymatida bajariladi. Agar ob'ektda birlamchi a'zo bo'lmasa, taqqoslash ish vaqtida xato 438 ga olib keladi - "Ob'ekt uning xususiyatini yoki usulini qo'llab-quvvatlamaydi."

Ob'ekt ishga tushirilmagan bo'lsa, taqqoslash ish vaqtida xatolikka olib keladi 91 - "Ob'ekt o'zgaruvchisi yoki blokirovka qilingan blok o'zgaruvchisi".

Agar "Is" dan boshqa har qanday taqqoslash operatori bilan so'zma-so'z "Hech narsa" ishlatilmasa, bu "Yaroqsiz ob'ektdan foydalanish" kompilyatsiya xatosiga olib keladi.

Agar standart Ob'ekt ob'ekti bo'lsa boshqa ob'ekt , VBA ibtidoiy tur qaytarilguncha yoki xato yuzaga kelguniga qadar har bir keyingi qaytish qiymatining standart elementini doimiy ravishda chaqiradi. Masalan, SomeClass-da, ChildValue tomonidan ChildValue a'zosi bo'lgan ChildClass-ning namunasi bo'lgan sukut bo'yicha a'zosi bo'lgan deylik. Taqqoslash ...

X \u003d New SomeClass Debug.Print x\u003e 42-ni o'rnating

Quyidagi kabi baholanadi:

X \u003d New SomeClass Debug.Print x.Value.ChildValue\u003e 42 ni o'rnating

Agar operand sonli bo'lsa va boshqa operand String yoki String kichik turining Variantidir, raqamli taqqoslash amalga oshiriladi. Bunday holda, agar Stringni raqam sifatida tasniflash mumkin bo'lmasa, taqqoslash ish vaqtida xatolikka olib keladi 13 - "Turning mos kelmasligi".

Agar a ikkalasi ham operandlar String yoki String ning Variant turi bo'lib, satrlarni taqqoslash kod birligi parametrlarini taqqoslash parametri asosida amalga oshiriladi. Ushbu taqqoslashlar tabiatan tabiatan amalga oshiriladi. yozib oling ramziy vakillik Raqamni o'z ichiga olgan satr emas raqamli xaritalashga mos keladi:

Public Sub Example () Dim chap Variant sifatida Dim right Variant as \u003d "42" right \u003d "5" Debug.Print left\u003e right "False Debug.Print Val (chap)\u003e Val (right)" tugmachalarini haqiqiy tugmachasini bosib chiqaradi

Shu sababli, raqamli tengsizlikni taqqoslashni amalga oshirishdan oldin String yoki Variant o'zgaruvchilarini raqamlarga o'tkazganingizga ishonch hosil qiling.

Agar operandalardan biri Sana bo'lsa, u holda boshqa operand raqamli bo'lsa yoki raqamli turga o'tkazilishi mumkin bo'lsa, unda asosiy dubl bo'yicha raqamli taqqoslash amalga oshiriladi.

Agar boshqa operand String yoki String subtipining Varianti bo'lsa, u joriy til yordamida Date ga o'ralishi mumkin bo'lsa, String Date ga o'tkaziladi. Agar uni joriy tilda sanaga qo'llash mumkin bo'lmasa, taqqoslash ish vaqti xatosiga olib keladi 13 - Turning nomuvofiqligi.

Ikki yoki bitta qiymatlarni va mantiqiy qiymatlarni taqqoslashda ehtiyot bo'ling. Boshqa raqamli turlardan farqli o'laroq, nolga teng bo'lmagan qiymatlarni VBA ning suzuvchi nuqtadan foydalanib taqqoslash ma'lumotlari turini targ'ib qilishdagi harakati tufayli True deb hisoblash mumkin emas:

Public Sub Example () Dim Test as Double Test \u003d 42 Debug.Print CBool \u200b\u200b(Test) "True-ni bosadi." True ikkilanganga ko'tariladi - Test "Boolean Debug" -ga o'tkazilmaydi.Print Test \u003d True "Noto'g'ri nashr etadi" aniq tashlab qo'yilgan holda: Debug.Print CBool \u200b\u200b(Test) \u003d True "True Debug.Print CDbl (-1) \u003d CDbl (True)" True End Sub-ni chop etadi

VBA mantiqiy operatorlari protsedurada murakkab qaror mezonlarini yaratish uchun alohida mantiqiy ifodalarning natijalarini birlashtirish uchun ishlatiladi (B.3-jadval).

Jadval B.3 - VBA mantiqiy operatorlari

Mantiqiy

Sintaksis

Ism / Tavsif

operator

El va E2

Birlashma. Ikkala E1 va E2 bo'lsa ham to'g'ri

to'g'ri, aks holda Yolg'on

El yoki E2

Ajratish. Agar bitta ifoda bo'lsa, to'g'ri

tirik yoki ikkalasi (E1 va E2) mavjud

true ga teng; aks holda - yolg'on

El emas

Rad etish. E1 qiymati bo'lsa, to'g'ri

qiymati False; El bo'lsa yolg'on

true ga teng

El Xor E2

Istisno. E1 va E2 bo'lsa, to'g'ri

turli xil ma'nolarga ega; aks holda -

El Eqv E2

Ekvivalentlik... E1 bo'lsa, to'g'ri

e2 bilan bir xil ma'noga ega;

aks holda - yolg'on

El Imp E2

Imkoniyat. E1 bo'lganda noto'g'ri

true ga teng va E2 False ga teng; aks holda

To'g'ri.

Ushbu jadvaldagi E operandlari taqqoslash operatsiyasi kabi har qanday mantiqiy mantiqiy ifodani aks ettiradi.

Murakkab iboralarni baholashda operatsiyalarni bajarish ustuvorliklari

Murakkab ifoda - bu ikki yoki undan ortiq iboralardan hosil bo'lgan har qanday ifoda. B.4-jadvalda ustuvorlikning kamayish tartibida guruhlar bo'yicha operatsiyalar mavjud, ya'ni guruh qancha pastroq bo'lsa, unda ko'rsatilgan amallar shuncha kech bajariladi. Ushbu tartibni o'zgartirish uchun qavslardan foydalaniladi. Xuddi shu darajadagi amallar chapdan o'ngga ifodada yozilish tartibida amalga oshiriladi.

Jadval B.4 - VBA ishlashining ustuvor yo'nalishlari

Operator

Izohlar

Yuqori darajadagi ustunlik

Unary minus - raqam belgisini o'zgartiring

Ko'paytirish va bo'linish teng ustuvorlikka ega; ular siz-

Butun bo'linish

Bo'linishning qolgan qismi

Qo'shish va ayirboshlash teng ustuvorlikka ega; ular siz-

chapdan o'ngga ifodada paydo bo'lganda raqamlangan

Har qanday mag'lubiyat birikmasi har qandayidan keyin amalga oshiriladi

ifoda va har qanday oldin arifmetik amallar

taqqoslash yoki mantiqiy operatsiyalar

<, <=, >, >=,

Barcha taqqoslash operatorlari teng ustunlikka ega va

chapdan o'ngga ifodada paydo bo'lganda hisobga olinadi.

Operatorlarni guruhlash uchun qavslardan foydalaning

iboralardagi taqqoslash xandagi

aql-idrok

Not And or Xor Eqv Im p \u200b\u200b- eng past ustuvorlikka ega

operatorlar

Qo'shimcha B VBA matematik funktsiyalari

VBA B.1-jadvalda ko'rsatilgan standart matematik funktsiyalar to'plamini taqdim etadi.

Jadval B.1 - VBA matematik funktsiyalari

Qaytish / harakat

N ning mutlaq qiymatini qaytaradi

N burchakning kosinusi, bu erda N - ra- da o'lchangan burchak

Burchak sinusini qaytaradi; N - o'lchangan burchak

radianlar

Burchakning tekstansiyasini qaytaradi; N - radiandagi burchak

N ning arktangensini radiandagi burchak sifatida qaytaradi

N (e - kuchiga ko'tarilgan doimiylikni qaytaradi

bu tabiiy logaritmalarning asosidir va u (for-

taxminan) 2.718282 ga teng

Butun sonli N qismini qaytaradi. Tuzatish raqamni yaxlitlamaydi, lekin

salbiy, Fix eng yaqin salbiyni qaytaradi

n dan katta yoki unga teng butun son

N. Int butun sonini qaytaradi. Int raqamni yaxlitlamaydi, lekin

har qanday kasr qismini tashlaydi. Agar N bo'lsa

salbiy, Int eng yaqin salbiyni qaytaradi

n dan kam yoki unga teng butun son

N ning tabiiy logarifmini qaytaradi

Tasodifiy sonni qaytaradi; argument emas

majburiy. Faqat Rnd funktsiyasidan foydalaning

tasodifiy sonlarning VBA generatorini ishga tushirgandan so'ng

randomize operatori bilan o'tirdi

Raqamning belgisini qaytaradi: agar N salbiy bo'lsa –1;

1 agar N ijobiy bo'lsa; 0, agar N 0 bo'lsa

N. VBA displeylarining kvadrat ildizini qaytaradi

ish vaqti xatosi, agar N salbiy bo'lsa

N operand har qanday sonli ifodani anglatadimi? ichida qabul qilinadi

Trigonometrik funktsiyalar argumenti (sinus, kosinus va tangens) darajalarda emas, balki radianlarda. Teskari trigonometrik funktsiya A t n (x) dasturga burchakning qiymatini -π / 2 dan π / 2 gacha bo'lgan radiusda qaytaradi, uning tanjeti x arifmetik ifodaning qiymatiga teng.

Radian va burchakning gradus o'lchovlari orasidagi bog'liqlik irratsional son through ≈ 3.14159265358979323846 orqali ifodalanadi.

Radianslar \u003d

Darajalar × π

Darajalar \u003d

Radianslar × 180

Radianslarga darajalarni o'tkazish uchun siz o'rnatilgan Excel funktsiyasidan foydalanishingiz mumkin - Application.Radians (x), bu erda x - burchak,

radianlarda berilgan.

$ \\ Mathbb {15} $ mantissasining aniqligi bilan doimiy qiymatning raqamli qiymatini olish uchun o'rnatilgan Excel Application.Pi () funktsiyasidan yoki arktangens VBA funktsiyasidan foydalanishingiz mumkin.

Pi \u003d Application.Pi () yoki Pi \u003d 4 * Atn (1)

Trigonometrik funktsiyalarni yozishga misollar

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