Internet Windows Android
Kengaytirish

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

Format nomi

Tavsif

Minglik ajratuvchisiz raqam

O'nli kasrning o'ng tomonidagi ikkita raqamni ko'rsatadi

O'nli kasrning chap tomonida bitta va o'ngdagi ikkita raqamni ko'rsatadi

O'nli kasrning chap va o'ng tomonidagi bitta raqamni ko'rsatadi va minglik ajratuvchisini ko'rsatadi

Raqamni foiz sifatida ko'rsatadi va kasrning o'ng tomonidagi ikkita raqamni chiqaradi

Suzuvchi kasrli nuqta formatidan foydalanadi

Agar raqam 0 bo'lsa, Yo'q, aks holda Ha ko'rsatiladi

Raqam 0 bo'lsa False, aks holda rost ko'rsatadi

Raqam 0 bo'lsa O'chirilgan va aks holda Yoqilgan ko'rsatiladi

VBA-da yozilgan funksiya hisoblashni amalga oshiradigan va qiymatni (yoki qiymatlar massivini) qaytaradigan koddir. Funktsiyani yaratganingizdan so'ng, uni uchta usulda ishlatishingiz mumkin:

  1. Ishchi varaqdagi formula sifatida, u argumentlarni qabul qilishi va qiymatlarni qaytarishi mumkin.
  2. VBA tartibingizning bir qismi sifatida. Sub protsedurada yoki boshqa funktsiyalar ichida.
  3. Shartli formatlash qoidalarida.

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.

E'tibor bering, VBA bilan yaratilgan foydalanuvchi tomonidan belgilangan funktsiyalar, odatda, o'rnatilgan funktsiyalardan sezilarli darajada sekinroq. Shuning uchun, ular o'rnatilgan funktsiyalar yordamida natijaga erisha olmaydigan yoki ko'p hisoblash bo'lmagan va ishlash jazosi muhim bo'lmagan holatlar uchun eng mos keladi.

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 yaratish

Keling, 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:

  • U har qanday boshqa o'rnatilgan funksiya kabi mavjud bo'ldi (yashirin funksiyani qanday yaratishni keyinroq aytib beramiz).
  • "=" belgisini kiritib, funksiya nomini yozishni boshlaganingizda, Excel barcha mosliklarni ko'rsatadi va nafaqat o'rnatilgan funktsiyalarni, balki moslashtirilgan funksiyalarni ham ko'rsatadi.

Funktsiyani bosqichma-bosqich tahlil qilaylik

Keling, 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.

  • Funktsiya nomida bo'shliq bo'lishi mumkin emas. Bundan tashqari, agar funktsiya hujayra mos yozuvlar nomi bilan to'qnashsa, uni chaqira olmaysiz. Masalan, siz ABC123 funksiyasini nomlay olmaysiz, chunki bu nom Excel ish varag'idagi katakka ham tegishli.
  • Funksiyangizga mavjud funksiya bilan bir xil nom bermasligingiz kerak. Agar buni qilsangiz, Excel o'rnatilgan funksiyaga ustunlik beradi.
  • Agar so'zlarni ajratmoqchi bo'lsangiz, pastki chiziq belgisidan foydalanishingiz mumkin. Masalan, Kuirsivdagi suma haqiqiy nomdir.

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()
"VBA bayonotlari
Tugatish funktsiyasi

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:

  • Excel ish kitobini oching va VBA muharririni ishga tushiring (bu yerni bosing Alt+F11) va keyin bosing F2.
  • Ekranning yuqori chap qismidagi ochiladigan ro'yxatdan kutubxonani tanlang VBA.
  • O'rnatilgan VBA sinflari va funktsiyalari ro'yxati paydo bo'ladi. Oynaning pastki qismida qisqacha tavsifni ko'rsatish uchun funksiya nomini bosing. Bosish F1 ushbu funksiya uchun onlayn yordam sahifasini ochadi.

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 protseduralar

Excel 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.

Argumentlar

Argumentlar 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 argumentlar

VBA 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 uzatish

VBA-dagi argumentlar protseduraga ikki usulda uzatilishi mumkin:

  • ByVal- argumentni qiymat bo'yicha uzatish. Demak, protseduraga faqat qiymat (ya’ni argument nusxasi) uzatiladi va shuning uchun protsedura ichidagi argumentga kiritilgan har qanday o‘zgartirishlar u chiqqanda yo‘qoladi.
  • Ref– argumentni havola orqali berish. Ya'ni, protsedura xotirada argumentning haqiqiy manziliga o'tkaziladi. Protsedura ichida argumentga kiritilgan har qanday o'zgarishlar protsedura tugagandan so'ng saqlanadi.

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:

  • Qaytish qiymatining ma'lumotlar turi protsedura sarlavhasida e'lon qilinishi kerak Funktsiya.
  • Qaytish qiymatini o'z ichiga olgan o'zgaruvchi protsedura bilan bir xil nomlanishi kerak Funktsiya. Bu o'zgaruvchini alohida e'lon qilish shart emas, chunki u har doim protseduraning ajralmas qismi sifatida mavjud. Funktsiya.

Bu quyidagi misolda mukammal tarzda tasvirlangan.

"Funktsiya" VBA protsedurasiga misol: 3 ta raqam bilan matematik operatsiyani bajarish

Quyida 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 chaqirish

Jarayon 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 chaqirish

VBA protsedurasi Funktsiya Excel ish varag'idan boshqa o'rnatilgan Excel funksiyasi kabi chaqirilishi mumkin. Shuning uchun, oldingi misolda yaratilgan protsedura FunktsiyaSumMinus 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'zgartirish

Keling, 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‘llash

Keyingi 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 chaqirish

VBA protsedurasini boshqa protseduradan "Sub" deb chaqirish

VBA 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 chaqirish

Jarayon 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:

  • bosing Alt+F8(tugmasini bosing Alt va uni ushlab turganda tugmani bosing F8).
  • Ko'rsatilgan makroslar ro'yxatida ishga tushirmoqchi bo'lgan birini tanlang.
  • bosing Bajarish(Yugurish)

Jarayonni bajarish uchun Sub tez va oson, siz unga tugmalar birikmasini belgilashingiz mumkin. Buning uchun:

  • bosing Alt+F8.
  • Ko'rsatilgan makroslar ro'yxatida klaviatura yorlig'ini tayinlamoqchi bo'lgan birini tanlang.
  • bosing Variantlar(Tanlovlar) va paydo bo'lgan muloqot oynasiga klaviatura yorliqlarini kiriting.
  • bosing KELISHDIKMI va dialog oynasini yoping Ibratli(Makro).

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 doirasi

Ushbu 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 chiqish

Agar 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 FunktsiyaQQS_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 funktsiyalari

3.9.1. O'rnatilgan funktsiyalar nima

IN 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 funktsiyalari

VBA 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 funktsiyalari

Bu 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)

VBA sintaksisi va dasturlash konstruksiyalari

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