O'rnatilgan vba funktsiyalari. Excel uchun VBA-da maxsus funktsiyalar
VBA-da quyidagi funktsiyalar turlari qo'llaniladi:
Matematik o'rnatilgan funktsiyalar;
VBA da ko'rsatilmagan matematik funktsiyalar;
Ma'lumotlarni formatlash funktsiyalari;
Turi konvertatsiya qilish funksiyalari
Matematik o'rnatilgan funktsiyalar
Qaytish qiymati |
||||||||||||||||||||||||||||||||
Raqamning mutlaq qiymati |
||||||||||||||||||||||||||||||||
arctg(x) - radyanlarda ko'rsatilgan parametr qiymatining aktangenti |
||||||||||||||||||||||||||||||||
sin(x) - radyanlarda ko'rsatilgan parametr qiymatidan burchak sinusini qaytaradi |
||||||||||||||||||||||||||||||||
cos(x) - radianlarda ko'rsatilgan burchakning kosinasi |
||||||||||||||||||||||||||||||||
tg(x) - radianlarda ko'rsatilgan parametr qiymatidan burchak tangensini qaytaradi |
||||||||||||||||||||||||||||||||
e x - belgilangan quvvatga ko'tarilgan e sonini qaytaradi, bu erda e - natural logarifmning asosi |
||||||||||||||||||||||||||||||||
ln(x) – sonli ifoda qiymatining natural logarifmini qaytaradi |
||||||||||||||||||||||||||||||||
- sonli ifodaning kvadrat ildizini qaytaradi |
||||||||||||||||||||||||||||||||
Intervaldan tasodifiy raqam) Nomlangan raqamlar formatlari
VBA-da yozilgan funksiya hisoblashni amalga oshiradigan va qiymatni (yoki qiymatlar massivini) qaytaradigan koddir. Funktsiyani yaratganingizdan so'ng, uni uchta usulda ishlatishingiz mumkin:
Excel allaqachon 450 dan ortiq o'rnatilgan funktsiyalarni o'z ichiga olgan bo'lsa-da, ba'zida ular ham etishmayapti. Ba'zan o'rnatilgan funktsiyalar siz qilmoqchi bo'lgan narsani qila olmaydi. Ba'zan, natijaga erishish uchun siz boshqalarga tushunarsiz bo'lgan ulkan va murakkab formulani yaratishingiz kerak. Bunday holda siz o'qish va ishlatish uchun qulay bo'lgan maxsus funktsiyani yaratishingiz mumkin.
O'rnatilgan funksiyalardan nafaqat siz, balki sizning hamkasblaringiz ham foydalanishlari mumkin. Siz yozgan funksiyalar Funktsiya ustasi muloqot oynasida boshqalar bilan birga paydo bo'ladi. Funktsiyalarni yaratish jarayoni sizni qo'rqitishi mumkin, ammo men sizni ishontirib aytamanki, bu juda oddiy. Protsedura (Sub) va funksiya (Funktsiya) o'rtasidagi farq nima?Asosiy farq shundaki, protsedura (sub) buyruqlar to'plamini bajarish uchun ishlatiladi va funktsiyadan (funktsiyadan) farqli o'laroq, qiymatni (yoki qiymatlar qatorini) qaytarish uchun mo'ljallanmagan. Ko'rsatish uchun keling, misol keltiraylik. Misol uchun, 1 dan 100 gacha bo'lgan raqamlar qatori mavjud va siz juftlarni toqlardan ajratishingiz kerak. (Sub) protsedurasidan foydalanib, siz, masalan, katakchalar bo'ylab o'tishingiz va to'ldirish yordamida g'alati bo'lganlarni ajratib ko'rsatishingiz mumkin. Va funktsiya qo'shni ustunda ishlatilishi mumkin va u qiymat juft yoki yo'qligiga qarab TRUE yoki FALSE qaytaradi. Bular. siz ish varag'idagi funksiya yordamida to'ldirish rangini o'zgartira olmaysiz. VBA-da foydalanuvchi tomonidan aniqlangan oddiy funktsiyani yaratishKeling, VBA-da oddiy moslashtirilgan funktsiyani yaratamiz va bularning barchasi qanday ishlashini ko'rib chiqamiz. Quyida harf qiymatlaridan voz kechib, matndan faqat raqamlarni qoldiradigan funksiyaning kodi keltirilgan. Funksiya raqamlari(Matn satr sifatida) Long Dim i Kadar Long Dim Natija String sifatida i = 1 To Len(Matn) Agar IsNumeric(Mid(Mat, i, 1)) bo‘lsa, natija = natija & Mid(Matn, i, 1) ) Keyingi raqamlar = CLng (natija) tugatish funktsiyasi Hammasi siz uchun ishlashi uchun ushbu kodni kitob moduliga joylashtirishingiz kerak. Agar buni qanday qilishni bilmasangiz, Excel-da makrosni qanday yozishni maqolasidan boshlang. Endi funksiya qanday ishlashini ko'rib chiqamiz, keling, uni varaqda ishlatishga harakat qilaylik: Funktsiyaning o'zini tahlil qilishdan oldin, uni yaratgandan so'ng paydo bo'lgan ikkita yoqimli daqiqaga e'tibor qaratamiz:
Funktsiyani bosqichma-bosqich tahlil qilaylikKeling, chuqur sho'ng'in qilaylik va bu xususiyat qanday yaratilganini ko'rib chiqaylik. Funktsiya chiziqdan boshlanadi Funksiya raqamlari (Matn string sifatida). So'z Funktsiya funktsiyaning boshlanishi haqida gapiradi, keyin uning nomi, bizning holatlarimizda Raqamlar.
Nomdan keyin funksiya argumentlari qavs ichida tasvirlangan. O'rnatilgan Excel funktsiyalariga o'xshash. Bizning holatlarimizda yagona argument ishlatiladi Matn. Argument nomidan keyin biz ko'rsatdik String sifatida, bu bizning argumentimiz matn qiymati yoki matn qiymatini o'z ichiga olgan hujayra havolasi ekanligini anglatadi. Agar ma'lumotlar turini belgilamasangiz, VBA uni shunday ko'rib chiqadi Variant(ya'ni siz har qanday ma'lumot turidan foydalanishingiz mumkin, VBA buni siz uchun aniqlaydi). Birinchi qatorning oxirgi qismi As Long funktsiya qaytaradigan ma'lumotlar turini belgilaydi. Bizning holatda, funktsiya butun son qiymatlarini qaytaradi. Bu ham kerak emas. Funktsiyaning ikkinchi va uchinchi qatorlari biz foydalanadigan qo'shimcha ichki o'zgaruvchilarni e'lon qiladi. Dim i As Long Dim natija As String O'zgaruvchan i belgilarni sanashda foydalanamiz. Oʻzgaruvchi natija funksiyaning oraliq natijasini saqlash uchun. Funktsiyaning vazifasi Matn o'zgaruvchisidagi barcha belgilarni ko'rib chiqish va faqat raqamlar bo'lganlarni saqlashdir. Shuning uchun biz tsiklni 1 dan oxirgi belgigacha boshlaymiz. i = 1 To Len uchun (Matn) Len - bu belgilar sonini aniqlaydigan funksiya. Funktsiyaning asosiy qatori matnning keyingi belgisi raqam ekanligini tekshirish va agar shunday bo'lsa, uni natija o'zgaruvchisida saqlashdir. Agar IsNumeric (O'rta(Matn, i, 1)) bo'lsa, natija = natija va O'rta (Matn, i, 1) Buning uchun bizga funksiya kerak IsNumeric- u qaytadi To'g'ri agar matn raqam bo'lsa va Yolg'on aks holda. Funktsiya O'rta Matn argumentidan oladi i belgi (ma'nosi 1 , funksiya ekanligini bildiradi O'rta faqat 1 belgini oladi)/ Funktsiya Keyingisi- halqani yopadi Uchun bu erda hamma narsa aniq. Raqamlar = CLng (natija) Ushbu qator bilan biz matn o'zgaruvchisini aylantiramiz natija, unda argumentning barcha raqamlari mavjud Matn, raqamli qiymatga. Va biz funktsiyamiz qanday natija berishi kerakligini aytamiz Raqamlar. Kodning oxirgi qatori Tugatish funktsiyasi. Bu VBA ga funksiya kodi shu yerda tugashini bildiruvchi talab qilinadigan kod qatori. Yuqoridagi kod VBA-da yaratilgan odatiy foydalanuvchi tomonidan belgilangan funksiyaning turli qismlarini tavsiflaydi. Kelgusi maqolalarda biz ushbu elementlarni batafsil ko'rib chiqamiz, shuningdek Excelda VBA funksiyasini bajarishning turli usullarini ko'rib chiqamiz. Funktsiya-protsedura natijani qaytaruvchi VBA protsedurasining maxsus turi. VBA o'rnatilgan funktsiyalari kabi foydalanuvchi tomonidan belgilangan protsedura funktsiyalari ixtiyoriy va nomlangan argumentlarga ega bo'lishi mumkin. Protsedura funksiyasini yozib olish uchun siz so'l yozuvchisidan foydalana olmaysiz, garchi siz magnitafon tomonidan yozilgan makrosni tahrirlashingiz va uni protsedura funksiyasiga aylantirishingiz mumkin. Protsedura funktsiyasining boshqa protseduralardan asosiy farqi, funksiyalar qiymat qaytaradi va protseduralar qaytarmaydi, bundan tashqari, protsedura funktsiyasi kalit so'zlardan foydalanadi. Funktsiya Va Tugatish funktsiyasi. Sintaksis: Funktsiya nomi() Funktsiya - bu funktsiyaning boshlanishini e'lon qiluvchi kalit so'z. Ism - funktsiya nomi. Funktsiya nomlari boshqa VBA identifikatorlari nomlari bilan bir xil qoidalarga amal qiladi. Arglist - bu funktsiya uchun argumentlar ro'yxati, ixtiyoriy element. Turi - har qanday turdagi funktsiyani qaytarish qiymati. Agar tur aniqlanmagan bo'lsa, protsedura funktsiyasi tomonidan qaytariladigan natija Variant turiga kiradi. Ism = ifoda VBA ga funksiya qaysi qiymatni qaytarishi kerakligini aytadigan funksiya topshirigʻi, ixtiyoriy element. Biroq, har doim protsedura funktsiyalariga tayinlash operatorini kiritishingiz kerak. End Function - funktsiyani tugatuvchi kalit so'zlar. Funktsiyada argumentlar bo'lmasa ham (masalan, Hozir, Sana), funktsiya deklaratsiyasida qavslardan foydalanish kerak. Odatda funktsiya hisoblashni amalga oshirish va natijani qaytarish uchun mo'ljallangan. Protsedura funksiyasini e'lon qilishda siz funktsiyaga uzatiladigan har bir argument nomini ko'rsatasiz. Ro'yxatdagi argument nomlari vergul bilan ajratilgan va har qanday VBA identifikatoriga tegishli qoidalarga amal qilishi kerak. Quyida bosh va keyingi bo'shliqlarni olib tashlaydigan va ifodadagi belgilar sonini hisoblaydigan oddiy protsedura funksiyasidan foydalanish ro'yxati keltirilgan. Funktsiyadan foydalanmasdan, ro'yxat quyidagicha ko'rinadi: Ushbu oddiy misoldan, menimcha, protsedura funktsiyalaridan foydalanishning asosiy g'oyasi aniq - dastur kodini o'qishni yaxshilash va uni qisqartirish (boshqacha aytganda, protsedura funktsiyasi bir xil kod "bo'lagi" 2 dan ortiq bo'lsa yoziladi. dastur kodida -3 marta). Haqiqatan ham, agar bizning protsedura funksiyamiz bir qatordan emas, balki, aytaylik, 10 qatordan iborat bo'lsa; va dastur kodi ushbu protsedura funktsiyasidan 5 marta foydalanadi, keyin umumiy dastur ro'yxati 38 qatorga qisqaroq bo'ladi. Yuqorida aytib o'tilganidek, VBA barcha argumentlarni Variant turlari sifatida funktsiya protsedurasiga o'tkazadi. Argumentlar ro'yxatidagi har bir argument uchun maxsus ma'lumotlar turlarini e'lon qilishingiz mumkin. O'zingizning VBA funktsiyalaringizni yaratishni boshlashdan oldin, Excel VBA-da kod yozishda foydalanishingiz mumkin bo'lgan oldindan o'rnatilgan o'rnatilgan funktsiyalarning katta to'plami borligini bilish foydali bo'ladi. Ushbu funktsiyalar ro'yxatini VBA muharririda ko'rish mumkin:
Bundan tashqari, misollar bilan o'rnatilgan VBA funktsiyalarining to'liq ro'yxatini Visual Basic Developer Center veb-saytida topish mumkin. VBA-da maxsus funksiya va pastki protseduralarExcel Visual Basic dasturida ma'lum bir vazifani bajaradigan buyruqlar to'plami protseduraga joylashtirilgan Funktsiya(funktsiya) yoki Sub(Ichki dastur). Jarayonlar orasidagi asosiy farq Funktsiya Va Sub protsedura shu Funktsiya natijani, protsedurani qaytaradi Sub- Yo'q. Shuning uchun, agar siz harakatlarni bajarishingiz va biron bir natija olishingiz kerak bo'lsa (masalan, bir nechta raqamlarni yig'ing), unda protsedura odatda qo'llaniladi. Funktsiya, va oddiygina ba'zi amallarni bajarish uchun (masalan, hujayralar guruhining formatini o'zgartirish) protsedurani tanlashingiz kerak. Sub. ArgumentlarArgumentlar yordamida VBA protseduralariga turli ma'lumotlar uzatilishi mumkin. Argumentlar ro'yxati protsedura e'lon qilinganda ko'rsatiladi. Masalan, protsedura Sub VBA da tanlangan diapazondagi har bir katakka belgilangan butun sonni (Integer) qo'shadi. Ushbu raqamni argument yordamida protseduraga o'tkazishingiz mumkin, masalan: Sub AddToCells(i Integer) ... End Sub E'tibor bering, protseduralar uchun argumentlar mavjud Funktsiya Va Sub VBA-da ixtiyoriy. Ba'zi protseduralar argumentlarni talab qilmaydi. Ixtiyoriy argumentlarVBA protseduralari ixtiyoriy argumentlarga ega bo'lishi mumkin. Bu argumentlar, agar foydalanuvchi xohlasa, belgilashi mumkin va agar ular o'tkazib yuborilsa, protsedura ular uchun standart qiymatlardan foydalanadi. Oldingi misolga qaytsak, ixtiyoriy funktsiyaga butun son argumentini qo'shish uchun siz uni quyidagicha e'lon qilasiz: Sub AddToCells(Ixtiyoriy i Butun son = 0) Bunday holda, butun son argumenti i standart 0 bo'ladi. Jarayonda bir nechta ixtiyoriy argumentlar bo'lishi mumkin; ularning barchasi argumentlar ro'yxatining oxirida keltirilgan. Argumentlarni qiymat va mos yozuvlar bo'yicha uzatishVBA-dagi argumentlar protseduraga ikki usulda uzatilishi mumkin:
Kalit so'zlardan foydalanish ByVal yoki Ref Protsedura deklaratsiyasida siz argumentning protseduraga qanday uzatilishini aniq belgilashingiz mumkin. Bu quyida misollar bilan tasvirlangan: Esda tutingki, VBA-dagi argumentlar sukut bo'yicha mos yozuvlar orqali uzatiladi. Boshqacha qilib aytganda, agar kalit so'zlar ishlatilmasa ByVal yoki Ref, keyin argument havola orqali uzatiladi. Jarayonlarni o'rganishni davom ettirishdan oldin Funktsiya Va Sub Batafsilroq, ushbu ikki turdagi protseduralar o'rtasidagi xususiyatlar va farqlarni yana bir bor ko'rib chiqish foydali bo'ladi. Quyida VBA protseduralarining qisqacha muhokamasi keltirilgan Funktsiya Va Sub va oddiy misollar ko'rsatilgan. VBA protsedurasi "Funktsiya"VBA muharriri protsedurani taniydi Funktsiya Function...End Function Yuqorida aytib o'tilganidek, protsedura Funktsiya VBA da (farqli ravishda Sub), qiymatni qaytaradi. Qaytish qiymatlari uchun quyidagi qoidalar qo'llaniladi:
Bu quyidagi misolda mukammal tarzda tasvirlangan. "Funktsiya" VBA protsedurasiga misol: 3 ta raqam bilan matematik operatsiyani bajarishQuyida VBA protsedura kodi misoli keltirilgan Funktsiya, bu turdagi uchta argumentni oladi Ikki marta(ikkita aniqlikdagi suzuvchi nuqta raqamlari). Natijada, protsedura boshqa turdagi raqamni qaytaradi Ikki marta, birinchi ikkita argument yig‘indisidan uchinchi argumentni ayirib tashlagan holda teng: Funktsiya SumMinus(dNum1 Double, dNum2 Double, dNum3 Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Function Bu juda oddiy VBA protsedurasi Funktsiya argumentlar orqali ma'lumotlarning protseduraga qanday uzatilishini ko'rsatadi. Jarayon tomonidan qaytarilgan ma'lumotlar turi sifatida aniqlanganligini ko'rishingiz mumkin Ikki marta(so'zlar buni aytadi Double sifatida argumentlar ro'yxatidan keyin). Ushbu misol, shuningdek, protsedura natijasi qanday ekanligini ko'rsatadi Funktsiya protsedura nomi bilan bir xil nomdagi o'zgaruvchida saqlanadi. VBA protsedurasini chaqirish "Funktsiya"Yuqorida muhokama qilingan oddiy protsedura bo'lsa Funktsiya Visual Basic muharririda modulga kiritilgan, uni boshqa VBA protseduralaridan chaqirish yoki Excel ish kitobidagi ish varag'ida ishlatish mumkin. VBA protsedurasini boshqa protseduradan "Funktsiya" ga chaqirishJarayon Funktsiya boshqa VBA protsedurasidan oddiygina ushbu protsedurani o'zgaruvchiga tayinlash orqali chaqirilishi mumkin. Quyidagi misol protseduraga qo'ng'iroqni ko'rsatadi SumMinus, bu yuqorida tavsiflangan edi. Sub main() Xira jami ikki marta jami = SumMinus(5, 4, 3) End Sub VBA protsedurasini ishchi varaqdan "Funktsiya" deb chaqirishVBA protsedurasi Funktsiya Excel ish varag'idan boshqa o'rnatilgan Excel funksiyasi kabi chaqirilishi mumkin. Shuning uchun, oldingi misolda yaratilgan protsedura Funktsiya – SumMinus quyidagi ifodani ishchi varaq katakchasiga kiritish orqali chaqirish mumkin: Summinus(10, 5, 2) VBA protsedurasi "Sub"VBA muharriri uning oldida tartib borligini tushunadi Sub, u quyidagi ochilish va yopish iboralari o'rtasida joylashgan buyruqlar guruhiga duch kelganida: Sub...End Sub VBA protsedurasi "Sub": 1-misol. Tanlangan hujayralar oralig'ida markazga moslashtirish va shrift hajmini o'zgartirishKeling, oddiy VBA protsedurasining misolini ko'rib chiqaylik Sub, uning vazifasi tanlangan hujayralar diapazonini formatlashni o'zgartirishdir. Hujayralar markazga (vertikal va gorizontal) moslashtiriladi va shrift o'lchami foydalanuvchi tomonidan belgilanganiga o'zgartiriladi: Sub Format_Centered_Va_Sized(Ixtiyoriy iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub Ushbu protsedura Sub amallarni bajaradi, lekin natijalarni qaytarmaydi. Ushbu misolda ixtiyoriy argument ham qo'llaniladi iFontSize. Agar argument bo'lsa iFontSize protseduraga o'tmagan Sub, keyin uning standart qiymati 10 deb qabul qilinadi. Biroq, agar argument iFontSize protseduraga o'tdi Sub, keyin foydalanuvchi tomonidan belgilangan shrift o'lchami tanlangan hujayralar oralig'ida o'rnatiladi. VBA “Sub” protsedurasi: 2-misol. Markazni tekislash va tanlangan katakchalar diapazonida shriftga qalinni qo‘llashKeyingi protsedura yuqorida muhokama qilinganga o'xshaydi, lekin bu safar o'lchamni o'zgartirish o'rniga tanlangan katakchalar diapazoniga qalin shrift uslubini qo'llaydi. Bu misol protsedurasi Sub, unga hech qanday argument berilmaydi: Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub Excel VBA da "Sub" protsedurasini chaqirishVBA protsedurasini boshqa protseduradan "Sub" deb chaqirishVBA protsedurasini chaqirish uchun Sub boshqa VBA protsedurasidan siz kalit so'zni yozishingiz kerak Qo'ng'iroq qiling, protsedura nomi Sub va keyin qavs ichida protsedura argumentlari. Bu quyidagi misolda ko'rsatilgan: Sub main() Call Format_Centered_And_Sized(20) End Sub Agar protsedura Format_markazlangan_va_oʻlchamli bir nechta argumentga ega, ular vergul bilan ajratilishi kerak. Mana bunday: Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub Ish varag'idan VBA protsedurasini "Sub" deb chaqirishJarayon Sub uni to'g'ridan-to'g'ri Excel ish varag'i katakchasiga kiritish mumkin emas, chunki protsedura yordamida amalga oshirilishi mumkin Funktsiya, chunki protsedura Sub qiymat qaytarmaydi. Biroq, protseduralar Sub, argumentlarga ega bo'lmagan va deb e'lon qilingan Ommaviy(keyinroq ko'rsatilgandek) ishchi varaq foydalanuvchilari uchun mavjud bo'ladi. Shunday qilib, agar yuqorida muhokama qilingan oddiy tartiblar Sub Visual Basic muharririda modulga kiritilgan, so'ngra protsedura Format_markazlangan_va_qalin Excel ish varag'ida foydalanish uchun mavjud bo'ladi va protsedura Format_markazlangan_va_oʻlchamli– mavjud bo'lmaydi, chunki unda argumentlar mavjud. Mana protsedurani ishga tushirish (yoki bajarish)ning oddiy usuli Sub, ish varag'ida mavjud:
Jarayonni bajarish uchun Sub tez va oson, siz unga tugmalar birikmasini belgilashingiz mumkin. Buning uchun:
Diqqat: Makrosga klaviatura yorlig'ini belgilashda, u Exceldagi standart kabi ishlatilmasligiga ishonch hosil qiling (masalan, Ctrl+C). Agar siz mavjud klaviatura yorlig'ini tanlasangiz, u makrosga qayta tayinlanadi va natijada foydalanuvchi tasodifan makrosni ishga tushirishi mumkin. VBA protseduralari doirasiUshbu qo'llanmaning 2-qismida o'zgaruvchilar va konstantalar doirasi va kalit so'zlarning roli mavzusi muhokama qilindi Ommaviy Va Shaxsiy. Ushbu kalit so'zlar VBA protseduralariga nisbatan ham ishlatilishi mumkin: Shuni esda tutingki, agar VBA protsedurasini e'lon qilishdan oldin Funktsiya yoki Sub kalit so'z kiritilmagan bo'lsa, protsedura uchun standart xususiyat o'rnatiladi Ommaviy(ya'ni, u berilgan VBA loyihasida hamma joyda mavjud bo'ladi). Bu sukut bo'yicha o'zgaruvchilarni e'lon qilishdan farq qiladi Shaxsiy. "Funktsiya" va "Sub" VBA protseduralaridan erta chiqishAgar siz VBA protsedurasining bajarilishini to'xtatishingiz kerak bo'lsa Funktsiya yoki Sub, uning tabiiy tugashini kutmasdan, buning uchun operatorlar mavjud Chiqish funksiyasi Va Subdan chiqish. Ushbu operatorlardan foydalanish quyida oddiy protsedura misoli yordamida ko'rsatilgan Funktsiya, bu keyingi operatsiyalarni bajarish uchun ijobiy dalil olishni kutadi. Agar protseduraga ijobiy bo'lmagan qiymat o'tkazilsa, unda boshqa operatsiyalar bajarilmaydi, shuning uchun foydalanuvchiga xato xabari ko'rsatilishi va protsedura darhol tugatilishi kerak: Funktsiya VAT_Amount(sVAT_Rate as Yagona) VAT_Amount = 0 Agar sVAT_Rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function Iltimos, protsedurani yakunlashdan oldin unutmang Funktsiya – QQS_summasi, kodga o'rnatilgan VBA funksiyasi kiritilgan MsgBox, bu foydalanuvchiga qalqib chiquvchi ogohlantirish oynasini ko'rsatadi. Dim nResult As Integer nMult1 = CInt(InputBox("Birinchi raqamni kiriting: ")) nMult2 = CInt(InputBox("Ikkinchi raqamni kiriting: ")) nResult = fMultiply(nMult1, nMult2) Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd 4. Kodni sharhlash uchun AutoNew() , ushbu protsedura uchun barcha kodlarni (jumladan, Public Sub AutoNew() va End Sub ) belgilang va Tahrirlash asboblar panelidagi Sharhni bloklash tugmasini bosing. 3.9. O'rnatilgan VBA til funktsiyalari3.9.1. O'rnatilgan funktsiyalar nimaIN VBA dasturlash tili bir necha o'nlab dasturlarni taqdim etadio'rnatilgan funktsiyalar. Ular VBA tilidagi har qanday dasturda mavjud va biz qaysi dasturiy mahsulotda ekanligimiz muhim emas - Excel, Word, Access yoki, masalan, AutoCAD. Ular juda faol ishlatiladi va ko'p hollarda ularsiz qilolmaysiz. Professional dasturchilar ularni to'liq avtomatik ravishda ishlatishadi, lekin men oddiy foydalanuvchilarga ular bilan tanishish uchun bir necha soat sarflashni maslahat beraman, chunki bu funktsiyalarni bilmasdan ular VBA-da samarali ishlay olmaydilar. Ularni o'rganish foydasiga qo'shimcha dalil shundaki, oddiy Visual Basic va VBScript-da deyarli bir xil funktsiyalar to'plami mavjud va bir xil nom va sintaksisga ega ushbu funktsiyalarning ko'pchiligi boshqa dasturlash tillarida - C++, Delphi, Java-da topilgan. , JavaScript va boshqalar P. IN VBA yordamida o'rnatilgan funktsiyalar harflar bo'yicha guruhlangan (3.2-rasm). Kurslarning ko'plab ishtirokchilari savol berishdi: rus tilida ushbu funktsiyalar bo'yicha yordam bormi? Afsuski, men bunday ma'lumotni topa olmadim, shuning uchun men ushbu kitobda qisqacha ma'lumot berishga harakat qilaman. Keyinchalik, biz VBA tilining faol qo'llaniladigan funktsiyalarining aksariyati haqida gapiramiz (amaliy ishda deyarli ishlatilmaydigan kosinus yoki tangens kabi matematik funktsiyalar va biz moliyaviy funktsiyalarni ko'rib chiqmaymiz). Joyni tejash uchun funktsiyalarning to'liq sintaksisi berilmaydi: asosiysi, har bir funktsiya nima qilishini va qanday holatlarda ishlatilishini tushunishdir. Quyidagi bo'limlardagi funktsiyalar funksionallik bo'yicha guruhlangan. Agar siz ma'lumotni oddiygina funktsiya nomi bilan topishingiz kerak bo'lsa, kitob oxiridagi indeksdan foydalanishingiz mumkin. Guruch. 3.2. O'rnatilgan funksiyalar yordami 3.9.2. Konvertatsiya va ma'lumotlar turini tekshirish funktsiyalariVBA dasturlarida qiymatlarni bir ma'lumot turidan boshqasiga aylantirish juda keng tarqalgan. Buni qilish kerak bo'lgan bir nechta odatiy holatlar: InputBox() orqali foydalanuvchidan qiymat qabul qilishda satr qiymatidan raqamli qiymatga aylantirish; Sana/vaqt qiymatini foydalanuvchilar kompyuterlarida mintaqaviy sozlamalardan qat'iy nazar, sana yoki vaqtni doimiy ravishda ko'rsatishimiz kerak bo'lganda satr qiymatiga aylantirish; maxsus sana/vaqt funksiyalaridan foydalanish uchun qiymatni satrdan sana/vaqtga aylantirish. Ko'pincha ma'lumotlar turlarini aylantirish uchun nomi "C" prefiksi (Convert so'zidan) va ma'lumotlar turi nomidan iborat bo'lgan funktsiyalardan foydalaniladi. Bu funksiyalar ro‘yxati quyidagicha: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr(). Oxir-oqibat nima sodir bo'lganini TypeName() funksiyasidan foydalanib ko'rishingiz mumkin, u ishlatiladigan ma'lumotlar turi nomini qaytaradi, masalan: nVar1 = CInt(InputBox("Qiymatni kiriting")) MsgBox TypeName(nVar1) Bunday holda, bu funktsiya "Integer" ni qaytaradi. Bundan tashqari, konvertatsiya qilish uchun foydali bo'lgan bir nechta boshqa funktsiyalar mavjud. Str() - raqamli qiymatni satrga aylantirish imkonini beradi. CStr() bilan deyarli bir xil ishlaydi, lekin musbat raqamlardan oldin bo'sh joy qo'yadi. Val() - raqamlar va harflar aralashmasidan faqat raqamli qiymatni "tashqariga chiqaradi". Bunday holda, funktsiya ma'lumotlarni chapdan o'ngga o'qiydi va birinchi raqamli bo'lmagan qiymatda to'xtaydi (ruxsat etilgan yagona raqamli bo'lmagan qiymat nuqta bo'lib, butun sonni kasr qismidan ajratib turadi). Raqamli ma'lumotlar bilan kesishgan o'lchov birliklarini yoki valyutani yozishda juda qulaydir. IsNumeric() va IsDate() - konvertatsiya paytida hech qanday xato bo'lmasligi uchun qiymatlarni muvofiqlikni tekshiring. Maxsus qiymatlarga muvofiqligini tekshirish uchun IsArray(), IsEmpty(), funksiyalaridan foydalanishingiz mumkin. IsError(), IsMissing(), IsNull() va IsObject() . Bu funktsiyalarning barchasi qaytadi To'g'ri yoki noto'g'ri, ularga berilgan qiymatni tekshirish natijalariga qarab. Hex() va Oct() - o'nlik ma'lumotlarni o'n oltilik va sakkizlik qiymatlarning qator ko'rinishiga aylantirish. 3.9.3. String funktsiyalariBu eng ko'p ishlatiladigan funktsiyalar. Ular doimo kerak va siz ularni juda yaxshi bilishingiz kerak. Asc() - bu funksiya o'tgan belgi uchun raqamli kodni qaytarish imkonini beradi. Masalan, Asc("D") 68 ni qaytaradi. Bu funksiya keyingi yoki oldingi harfni aniqlash uchun foydalidir. Odatda qarama-qarshi amalni bajaradigan Chr() funksiyasi bilan birgalikda ishlatiladi - u o'zining raqamli kodiga muvofiq belgini qaytaradi. Misol uchun, Excel-dagi ushbu kod rus alifbosining harflarini A dan U gacha A1 dan A20 gacha bo'lgan katakchalarga ketma-ket yozishga imkon beradi: Dim n, nCharCode sifatida butun son n = 1 nCharCode = Asc("A") Do while n<= 20 ActiveWorkbook.ActiveSheet.Range("A" & n).Qiymat = Chr(nCharCode)
nCharCode = nCharCode + 1 tsikl Bu funksiyaning variantlari AscB() va AscW() dir. AscB() belgi uchun raqamli kodning faqat birinchi baytini qaytaradi, AscW() esa belgi uchun Unicode kodini qaytaradi. Chr() - belgini raqamli kodi bilan qaytaradi. Asc() funksiyasi bilan birgalikda foydalanishga qo'shimcha ravishda (oldingi misolga qarang), siz yana bitta vaziyatda usiz ishlay olmaysiz: xizmat belgisini chiqarish kerak bo'lganda. Misol uchun, Word dasturida "Gazprom" qiymatini (tirnoq ichida) yozishimiz kerak. Iqtibos - bu xizmat belgisi va qatordan foydalanishga urinish: Tanlash.Matn = ""Gazprom"" sintaksis xatosiga olib keladi. Va hamma narsa yaxshi bo'ladi: Tanlash.Matn = Chr(34) & "Gazprom" & Chr(34) Ushbu funktsiyaning variantlari mavjud - ChrB() va ChrW(). Ular Asc() funksiyasi uchun bir xil variantlarga o'xshash ishlaydi. InStr() va InStrRev() eng mashhur funksiyalardandir. Satr oʻzgaruvchisi tanasidagi belgilar ketma-ketligini aniqlash va uning oʻrnini qaytarish imkonini beradi. Agar ketma-ketlik topilmasa, u holda 0 qaytariladi InStr() funksiyasi satr boshidan, InStrRev() esa oxiridan izlaydi. Left() , Right() , Mid() - mos ravishda chap, o'ng yoki o'rtadagi mavjud satr o'zgaruvchisidan ko'rsatgan belgilar sonini olish imkonini beradi. Len() - satrdagi belgilar sonini (satr uzunligi) qaytaradi. Ko'pincha looplar, almashtirish operatsiyalari va boshqalar bilan ishlatiladi. LCase() va UCase() - satrni mos ravishda kichik va katta harflarga aylantiradi. Ko'pincha muhim bo'lmagan holatlarda taqqoslash uchun qiymatlarni tayyorlash uchun foydalaniladi (familiyalar, kompaniyalar, shaharlar va boshqalar). LSet() va RSet() - bir o'zgaruvchini uzunligini o'zgartirmasdan boshqasining belgilari bilan to'ldirish (mos ravishda chap va o'ng). Qo'shimcha belgilar kesiladi va etishmayotgan belgilar o'rniga bo'sh joylar qo'yiladi. LTrim() , RTrim() , Trim() - mos ravishda chap, o'ng yoki ikkala chap va o'ngdagi bo'shliqlarni olib tashlash. Replace() - satrdagi bir belgilar ketma-ketligini boshqasiga almashtiradi. Space() va String() - mos ravishda siz belgilagan bo'shliqlar yoki belgilar soni qatorini qaytaradi. Odatda shakllantirish uchun ishlatiladi |