VBA-da şərti operatorlar. Visual Basic İdarəetmə Makro Funksiyasında Şərti qurur, əgər

Visual Basic for Application (VBA) proqramında ifadələrin icrası qaydasını dəyişməyin bir neçə yolu var. VBA idarəetmə strukturları bir çox cəhətdən digər proqramlaşdırma dillərindəki oxşar strukturlara bənzəyir.

Əsas VBA idarəetmə strukturları:

  • Yoxsa "Bitirsə
  • Növbəti üçün
  • Wend isə
  • Döngə edin
  • Case seçin "Son Seçim
  • Hər Növbəti Üçün

    Nəzarət təlimatı Əgər Onda Yoxsa "Bitirsə
    Bu təlimat müəyyən bir vəziyyətin (və ya şərtlər toplusunun) sınaq nəticələrindən asılı olaraq təlimatların icrası qaydasını dəyişir.

    Misal:

    Sub TestIfThen()

    iData = "paşulka"

    Əgər iData = "Excel"dirsə
    MsgBox "Bu mesajı heç vaxt görməyəcəksiniz!!!"
    ElseIf iData = "Ofis" Sonra
    MsgBox "Təəssüf ki, siz də bu mesajı görməyəcəksiniz!!!"
    Başqa
    MsgBox "Bu mesaj hər halda görünəcək",iData
    Bitərsə

    Şərhlər:
    Əgər- skanın başlanğıcını bildirən açar söz
    iData- dəyəri yoxlanılacaq dəyişən
    Sonra- çekin sonunu bildirən açar söz
    MsgBox- mesaj
    ElseIf- yeni taramanın başlanğıcını bildirən açar söz
    Sonra- əlavə çekin sonunu göstərən açar söz
    MsgBox- mesaj
    Başqa- test nəticəsi müsbət olduqda icra edilən təlimatlar blokunun sonunu və nəticə mənfi olduqda yerinə yetirilən təlimatlar blokunun başlanğıcını bildirən açar söz.
    MsgBox- mesaj
    Bitərsə

    If then Else "End If ifadəsində açar sözlər ElseIfBaşqa isteğe bağlıdır.

    Növbəti nəzarət təlimatı üçün
    Bu təlimat müəyyən hərəkətləri lazımi sayda yerinə yetirməyə imkan verir. Belə təlimatlar adətən döngələr adlanır.

    Misal:

    Sub TestForNext()

    iCount üçün = 1-dən 100-ə qədər Addım 2
    i = i + 1
    Sonrakı

    Şərhlər:
    üçün
    iCount- döngənin təkrar sayını təyin edən dəyişən.
    1 - ilkin sayğac dəyəri
    Kimə- sayğacın başlanğıc və son qiymətini ayıran açar söz
    100 - son sayğac dəyəri
    addım- əks addımı təyin edən açar söz
    2 - əks addım (nömrə)
    Sonrakı- açar söz, ona çatdıqdan sonra sayğac dəyəri addım dəyəri ilə dəyişir, bundan sonra idarəetmə yenidən dövrənin əvvəlinə keçir.
    MsgBox

    For Next ifadəsində açar sözdür addım isteğe bağlıdır. Əgər o yoxdursa, əks icra addımı 1-ə bərabər olacaq.

    vacibdirƏks addım bir nömrə olmalıdır. Əgər sayğac addımı mənfi ədəd kimi göstərilibsə, onda sayğac dəyəri hər dövrə ilə azalacaq.

    Məsələn, geri sayma ilə:

    Sub TestForNext2()

    iCount üçün = 300 - 1 Addım -3
    i = i + 1
    iCount = 153 olarsa, Çıxın
    Növbəti iCount

    MsgBox "Təkrarların sayı:" & i

    Diqqət edin:
    Əgər iCount = 153 Sonra- bu VBA kodunda biz artıq bizə məlum olan If then Else təlimatından istifadə etdik
    Üçün çıxın
    Növbəti iCount- kodda açar sözdən sonra yerləşən dəyişən (sayğac) var. Bu sintaksis, bir qayda olaraq, VBA kodunda kifayət qədər oxşar təlimatlar varsa, bir döngənin sonunu vizual olaraq təyin etmək üçün istifadə olunur.

    Wend nəzarət təlimat isə
    Bu təlimat müəyyən bir şərt yerinə yetirildiyi müddətcə müəyyən hərəkətləri yerinə yetirməyə imkan verir.

    Misal:

    Alt TestWhileWend()

    iCount iCount = iCount + 1 olarkən
    Wend

    Şərhlər:
    ikən- dövrənin başlanğıcını bildirən açar söz
    iCount - bu təlimatın icra olunacağı şərt
    Wend
    MsgBox- təkrarların sayı haqqında mesaj

    Döngə nəzarəti təlimatını yerinə yetirin
    Bu təlimat müəyyən hərəkətləri yalnız verilmiş şərt yerinə yetirildiyi müddətdə deyil, həm də əksinə, verilmiş şərt yerinə yetirilənə qədər yerinə yetirməyə imkan verir.

    Misal:

    Alt TestDoLoop()

    iCount >= 100-ə qədər edin
    iCount = iCount + 1
    Döngə

    MsgBox "Təkrarların sayı: " & iCount

    Şərhlər:
    Et- dövrənin başlanğıcını bildirən açar söz
    qədər- şərtin mövcudluğunu göstərən açar söz
    iCount >= 100- bu göstərişin icra olunacağı şərt
    Döngə- döngənin sonu mənasını verən açar söz
    MsgBox- təkrarların sayı haqqında mesaj

    Sub TestDoLoop2()

    Et
    iCount = iCount + 1
    Əgər iCount = 50 olarsa, Do-dan çıxın
    iCount = 100-ə qədər döngə

    MsgBox "Təkrarların sayı: " & iCount

    Diqqət edin:
    Əgər iCount = 50 Sonra- bu VBA kodunda biz yenidən bizə məlum olan If then Else təlimatından istifadə etdik
    Do-dan çıxın- sikldən erkən çıxmaq mənasını verən təlimat
    iCount = 100- bu göstərişin icra olunacağı şərt

    Qeyd:
    Döngənin sonunda göstərilən şərt onun ən azı bir dəfə yerinə yetirilməsinə zəmanət verir. While Wend, Do Loop təlimatları ilə diqqətli olun, çünki şərti səhv təyin etsəniz, demək olar ki, əbədi mobil telefon əldə edə bilərsiniz.

    Case "End Select" idarəetmə təlimatını seçin
    Bu ifadə dəyişənin və ya ifadənin dəyərinin nəticələrindən asılı olaraq bir neçə kod parçasından birini yerinə yetirir.

    Misal:

    Alt TestSelectCase()

    Case iNumeric seçin
    İş 1

    İş 2, 5
    MsgBox "Bu mesajı görməməlisiniz"
    İş 10-dan 13-ə qədər
    MsgBox "Bu mesajı görməməlisiniz"
    Case > 14
    MsgBox "Bu, görməli olduğunuz mesajdır"
    Başqa Dava
    MsgBox "Dəyişən Son Seçimdirsə, bu mesaj görünəcək

    Şərhlər:
    Case seçin
    iNumeric- dəyəri icra üçün VBA kodu fraqmentinin seçilməsini müəyyən edən dəyişən və ya ifadə
    İş 1- müqayisə üçün dəyərin ilk variantı.
    Əgər dəyişənin qiyməti ona uyğun gəlirsə, o zaman Case-dən sonrakı kod fraqmenti yerinə yetiriləcək, lakin növbəti açar Case-dən əvvəl, onda təlimat öz işini tamamlayacaq. Əks halda, tarama davam edəcək.
    İş 2, 5- mənanın ikinci variantı.
    İş 10-dan 13-ə qədər- üçüncü məna variantı.
    Case > 14- dördüncü məna variantı.
    MsgBox- bu halda göstəriləcək mesaj
    Başqa Dava- əvvəlki variantlardan heç biri uyğun gəlmirsə, kodun icrası mənasını verən açar sözlər.
    Seçimi bitir- təlimatın sonunu bildirən açar söz

    Select Case ifadəsində "End Select açar sözü Başqa Dava isteğe bağlıdır.

    Hər bir sonrakı üçün nəzarət təlimatı
    Bu təlimat hər bir ailə obyekti və ya massiv elementi ilə müəyyən hərəkətləri yerinə yetirməyə imkan verir.

    Range obyekti ilə nümunə:

    Sub TestForEachNextRange()


    i = i + 1
    iCell.Value = "Cell #" & i !}
    Sonrakı

    MsgBox "Hüceyrələrin sayı:" & i

    Şərhlər:
    Hər biri üçün- təlimatın başlanğıcını göstərən açar sözlər
    iCell- qrupun elementlərinin qiymətlərinin təyin olunduğu dəyişən (massiv və ya ailə) massiv elementləri ilə işləmək üçün dəyişən Variant tipinə aid olmalıdır.
    In- dəyişəni qrupdan ayıran açar söz
    Aralıq("A1:C5")- qrup, yəni. massiv və ya obyektlər ailəsi Döngənin təkrar sayı qrupa daxil olan elementlərin sayından asılıdır. və sonra bütün sonrakılar.
    Sonrakı- açar söz, hansı idarəetməyə çatdıqda yenidən dövrənin əvvəlinə keçir.
    MsgBox- qrup elementlərinin sayı haqqında mesaj.

    Bu halda, Range obyektindəki xanaların sayının oxşar hesabından istifadə etmək ən yaxşı yol deyil, çünki bu obyekt bu tapşırığın öhdəsindən daha yaxşı gələcək bir xüsusiyyətə malikdir: Range obyekti: onun xüsusiyyətləri və metodları


  • Range obyekti ilə manipulyasiya nümunəsi:

    Sub TestForEachNextRangeChanges()

    Diapazondakı hər iCell üçün("A1:C5")

    i = i + 1: iCell.Value = i

    Əgər iCell.Value 5 olarsa
    iCell.Font.Size = 15
    iCell.Interior.ColorIndex = 50
    ElseIf iCell.Value = 13 Və ya iCell.Value = 5 Sonra
    iCell.Font.Size = 20
    iCell.Interior.ColorIndex = 3
    Başqa
    iCell.Clear
    Bitərsə

    Diqqət edin:
    - bu VBA kodunda xanadakı dəyərləri yoxlamaq üçün bizə artıq məlum olan If then Else təlimatından istifadə etdik.
    - hansı şərtin testdən keçməsindən asılı olaraq, Range obyektinin müxtəlif xassələrindən istifadə edən müəyyən kod parçası yerinə yetirilir.

    Worksheets ailəsi ilə nümunə:

    Sub TestForEachNextSheet()

    İş vərəqlərindəki hər bir iList üçün
    i = i + 1
    iNameList = iNameList & Chr(10) & iList.Name
    Sonrakı

    MsgBox "İş vərəqlərinin sayı: " & i & Chr(10) & _
    "İş vərəqi adları: " & iNameList

    Bu vəziyyətdə, iş vərəqlərinin sayının oxşar hesabından istifadə etmək ən yaxşı yol deyil, çünki bu obyekt də bu vəzifənin öhdəsindən daha yaxşı gələcək bir xüsusiyyətə malikdir.

    Çox vaxt proqramın müəyyən yerində müəyyən şərtlərdən asılı olaraq müəyyən ifadələri yerinə yetirmək lazımdır. Bu xüsusiyyət, öz növbəsində qərar qəbul edən strukturlardan və döngələrdən ibarət olan idarəetmə konstruksiyalarından (və ya strukturlardan) istifadə etməklə Visual Basic-də həyata keçirilə bilər. Aşağıda iki mövcud qərar qəbuletmə konstruksiyasının ətraflı təsviri verilmişdir.

    Əgər: Sonra qurun. Bu quruluşun bir neçə növü var. Hər hansı bir şərt yerinə yetirildikdə, bir ifadəni yerinə yetirmək lazımdırsa, aşağıdakı formanın konstruksiyasından istifadə etməlisiniz:

    Şərt varsa Sonra ifadəsi

    Şərtin yoxlanılmasının nəticəsi True qiyməti olduqda, onda xidmət sözündən sonra yerləşən ifadə yerinə yetirilir. Digər tərəfdən, şərti yoxladıqdan sonra False qiyməti alınarsa, növbəti ifadəni ardıcıllıqla yerinə yetirin. Bu strukturun bütün təsvir edilən parametrləri bir sətirdə göstərilməlidir.

    Şərt yerinə yetirildikdə, bir deyil, bir neçə operatoru yerinə yetirmək lazımdırsa, aşağıdakı konstruksiyadan istifadə edilməlidir:

    Şərtlər Əgər İfadələr Bitirsə

    Əgər yoxlanılan şərt doğrudursa, Then açar sözündən sonra yerləşən ifadələr yerinə yetiriləcək. Digər tərəfdən, əgər şərt yanlışdırsa, bu konstruksiyadan sonra növbəti ifadə icra olunur. Operator blokunda yalnız bir ifadə olduğu halda, bu struktur yenə də End If xidmət ifadəsi ilə bitməlidir.

    Müəyyən bir şərtin yoxlanılması nəticəsindən asılı olaraq müəyyən bir operatoru (və ya operatorlar blokunu) yerinə yetirmək lazımdırsa, Visual Basic-də aşağıdakı konstruksiyadan istifadə edilməlidir:

    Şərtlər varsa, onda Operatorlar1 Başqa Operatorlar2 Sondur

    Əgər şərt O zaman Operatorlar1 Başqa: Operatorlar2 Sondur

    Əgər şərtin yoxlanılmasının nəticəsi True olarsa, onda Then açar sözündən sonra yerləşən bəyanat1 bloku yerinə yetiriləcək. Digər tərəfdən, əgər şərt yoxlaması Yanlış nəticə verirsə, o zaman Else xidmət sözündən sonra yerləşən ifadələr2 bloku yerinə yetiriləcək.

    Verilmiş variantlardan ikincisində operatorlar bloku kimi ya bir operatordan istifadə etmək olar2 (sonra Else xidmət sözü ilə eyni sətirdə “:” işarəsindən sonra yazılır), ya da bir neçə (bu halda hər bir operator) ikincisi ilə başlayan ayrı sətirdə yazılır).

    Visual Basic-də bir deyil, bir neçə şərt yoxlanıldıqdan sonra müəyyən bir hərəkətin (və ya hərəkətlər toplusunun) yerinə yetirilməsi lazım olduqda, aşağıdakı idarəetmə strukturundan istifadə edilməlidir:

    Əgər şərt O zaman Operatorlar1 ElseIf şərt2 Sonra Operatorlar2 . . Bitərsə

    If açar sözündən sonra yerləşən şərt1 doğrudursa, Then-dən sonra yerləşən ifadələr1 bloku yerinə yetirilir. Əgər yalandırsa, o zaman ElseIf xidmət sözündən sonra yerləşən şərt2 yoxlanılır, doğrudursa, operator2 bloku yerinə yetirilir və s. Şərtlərdən heç biri doğru deyilsə, yəni bütün yoxlamaların nəticəsi Yanlışdırsa, Else açar sözündən sonra yerləşən ifadələrN bloku yerinə yetiriləcək (bu blok isteğe bağlıdır).

    Yuxarıdakı If:Then strukturuna əlavə olaraq, sınaqdan keçirilən şərtdən asılı olaraq iki dəyərdən birini qaytaran IIf funksiyasını da nəzərdən keçirməlisiniz.

    Bu funksiyanın sintaksisi:

    IIf(şərt, dəyər1, dəyər2)

    Şərtin yoxlanılmasının nəticəsi True olduqda, funksiya 1 dəyərini, yoxlama Yanlış qaytardıqda isə nəticə qaytarılır - dəyər2. Misal üçün:

    Dim intA Tam ədəd kimi, strA As String intA = 6 strA = IIf(intA Mod 2=0, "Cüt", "Qeyri-bərabər")

    Əgər intA ədədi 2-yə qalıqsız bölünürsə, strA sətrinə “Çüt”, əks halda “Cüt deyil” qiyməti təyin ediləcək.

    Seçin:İnşaat. Müəyyən bir şərt doğrudursa, yerinə yetirilməli olan bir neçə ifadə (və ya ifadələr bloku) olduqda, If:Then konstruksiyasını yazmaq olduqca çətin olacaq. Ona görə də belə hallarda proqramın oxunuşunu yaxşılaşdıran Select:Case strukturundan istifadə etməlisiniz. Onun dizaynı belə görünür:

    Case dəyişənini seçin Case dəyərlər1 Operators1 Case values2 Operators2 . . . Seçimi bitir

    Əgər dəyişəndə ​​Case birinci açar sözündən sonra yerləşən dəyər1 varsa, o zaman ifadələr1 bloku icra olunur. Digər tərəfdən, dəyişənin məzmunu dəyər2-yə bərabərdirsə, o zaman operator2 bloku yerinə yetirilir və s. Dəyişənin məzmunu verilmiş qiymətlərin heç birinə bərabər olmadıqda, sözügedən konstruksiyada isteğe bağlı olan Case:Else xidmət ifadəsindən sonra yerləşən operatorN bloku yerinə yetirilir.

    Bir dəyişənin bir neçə dəyəri üçün eyni operatorun (operatorlar blokunun) icrası lazım olduğu halda, bu dəyərlərin siyahısı Case açar sözündən sonra vergüllə ayrılaraq göstərilməlidir.

    Misal üçün:

    Case x Case 1'i seçin x=x+1 Case 2, 3, 4 x=10 Case Əks halda x=20 Son Seçin

    Tək sətirli və çoxsətirli If...Then...Else ifadəsi konstruksiyaları və VBA Excel kodunda istifadə olunan IIf funksiyası - sintaksis, komponentlər, nümunələr.

    Əgər...Onda...Başqa bəyanat

    Operator Əgər...Sonra...Başqa yoxlanılan şərtlərin nəticələrindən asılı olaraq idarəetməni operator bloklarından birinə ötürmək üçün nəzərdə tutulmuşdur.

    Bir xəttli tikinti

    Operator Əgər...Sonra...Başqa açar sözlər olmadan bir sətirli konstruksiyada istifadə edilə bilər Başqa, Bitərsə.

    Tək sətirli If...Sonra... sintaksisi

    Əgər[vəziyyət] Sonra[operatorlar]

    Bir xəttli komponentlər Əgər... Onda...

    • vəziyyət Doğru və ya Yalan;
    • operatorlar vəziyyət dəyəri qaytarır Doğru;

    Əgər komponent vəziyyət dəyəri qaytarır Yalan, tikinti operatorları bloku Əgər... Onda...

    Misal 1

    Sub primer1() Dim d Tam Ədəd kimi, a As String d = InputBox("1-dən 20-yə qədər rəqəm daxil edin", "Nümunə 1", 1) Əgər d > 10 olarsa, a = "" & d & " rəqəmi böyükdür 10" MsgBox və End Sub-dan çox

    Çoxxətli tikinti

    Çoxsətirli If...Then...Else konstruksiyasının sintaksisi

    Əgər[vəziyyət] Sonra[operatorlar] ElseIf[vəziyyət] Sonra[operatorlar] ---------------- Başqa[operatorlar] Bitərsə

    Çox xəttli dizaynın komponentləri Əgər...Sonra...Başqa:

    • vəziyyət- açar sözdən sonra rəqəmli və ya sətir ifadəsi Əgər və ya ElseIf və bir boolean dəyəri qaytarır Doğru və ya Yalan;
    • operatorlar- VBA Excel kodu ifadələri bloku, əgər komponent varsa icra olunur vəziyyət dəyəri qaytarır Doğru.
    • nöqtəli xətt sətirdən əlavə tikinti bloklarını bildirir ElseIf [şərt] Sonra və simlər [operatorlar];
    • açar sözdən sonra ifadələr bloku Başqa hər halda icra edilir, lakin xəttdən kod bloku Başqa və simlər [operatorlar] isteğe bağlıdır və buraxıla bilər.

    Əgər komponent vəziyyət dəyəri qaytarır Yalan, tikinti operatorlarının aşağıdakı bloku Əgər...Sonra...Başqa atlanır və proqram nəzarəti kodun növbəti sətrinə keçirilir.

    Çox xəttli dizaynın ən sadə versiyası Əgər...Sonra...Başqa:

    Əgər[vəziyyət] Sonra[operatorlar] Başqa[operatorlar] Bitərsə

    Misal 2

    Sub primer2() Dim d Tam ədəd kimi, a As String d = InputBox("1-dən 40-a qədər rəqəm daxil edin", "Misal 2", 1) Əgər d< 11 Then a = "Число " & d & " входит в первую десятку" ElseIf d >10 Və d< 21 Then a = "Число " & d & " входит во вторую десятку" ElseIf d >20 Və d< 31 Then a = "Число " & d & " входит в третью десятку" Else a = "Число " & d & " входит в четвертую десятку" End If MsgBox a End Sub

    IIf funksiyası

    Funksiya IIf verilmiş şərti yoxlayır və testin nəticəsindən asılı olaraq dəyəri qaytarır.

    Funksiya sintaksisi

    IIf([şərt], [doğrudursa], [yalandırsa])

    IIf funksiyasının komponentləri

    • vəziyyət- Boolean dəyərini qaytaran rəqəmli və ya sətir ifadəsi Doğru və ya Yalan;
    • Doğrudursa IIf, Əgər vəziyyət qaytarılan dəyər Doğru;
    • Əgər Yalan- funksiyanın qaytardığı dəyər IIf, Əgər vəziyyət qaytarılan dəyər Yalan.

    Misal 3

    Sub primer3() Dim d Tam Ədəd, a As String d = InputBox("1-dən 20-yə qədər rəqəm daxil edin", "Misal 3", 1) a = IIf(d)< 10, d & " - число однозначное", _ d & " - число двузначное") MsgBox a End Sub

    “Ləğv et” düyməsini kliklədikdə və ya xaç işarəsi olan nümunələrdən InputBox dialoq qutusunu bağladığınızda xəta yaranır, çünki bu hallarda o, boş sətir qaytarır. Tam dəyişən d üçün boş sətir təyin etmək xətaya səbəb olur. Dialoq qutusunda “OK” düyməsini sıxdığınız zaman VBA Excel avtomatik olaraq mətn formatında daxiletmə sahəsinə daxil edilmiş rəqəmləri d dəyişəninin rəqəmsal formatına çevirir.

    Excel VBA-da istifadə olunan ən vacib şərti operatorlar operatorlardır Əgər... OndaCase seçin. Bu ifadələrin hər ikisi bir və ya bir neçə şərti sınaqdan keçirir və nəticədən asılı olaraq müxtəlif hərəkətləri yerinə yetirəcək. Sonra bu iki şərti operator haqqında daha çox danışacağıq.

    Visual Basic-də "Əgər... Sonra" ifadəsi

    Operator Əgər... Ondaşərti yoxlayır və əgər DOĞRU olarsa, müəyyən edilmiş hərəkətlər toplusu yerinə yetirilir. Şərt yalnış (YANLIŞ) olduqda yerinə yetirilməli olan hərəkətlər toplusu da müəyyən edilə bilər.

    Operator sintaksisi Əgər... Onda bunun kimi:

    Əgər Vəziyyət 1 Sonra
    Şərt 1 yerinə yetirildikdə hərəkətlər
    ElseIf Vəziyyət 2 Sonra
    Şərt 2 yerinə yetirildikdə hərəkətlər
    Başqa
    Şərtlərdən heç biri yerinə yetirilmədikdə hərəkətlər
    Bitərsə

    Bu ifadədə elementlər ElseIfBaşqa lazım olmadıqda operator şərtlərindən istifadə edilə bilməz.

    Aşağıda operatorun istifadə etdiyi bir nümunə verilmişdir Əgər... Onda Aktiv xananın doldurma rəngi tərkibindəki dəyərdən asılı olaraq dəyişir:

    Əgər ActiveCell.Value< 5 Then ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет ElseIf ActiveCell.Value < 10 Then ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End If

    Qeyd edək ki, şərt doğru olduqdan sonra şərti ifadənin icrası dayandırılır. Buna görə də, əgər dəyişənin dəyəri ActiveCell 5-dən az olduqda, birinci şərt doğru olur və hüceyrə yaşıl rəngə boyanır. Bundan sonra bəyanatın icrası Əgər... Onda kəsilir və qalan şərtlər yoxlanılmır.

    Visual Basic-də Case Statement seçin

    Operator Case seçin operatora bənzəyir Əgər... Onda ki, o, həm də şərtin doğruluğunu yoxlayır və nəticədən asılı olaraq, variantlardan birini seçir.

    Operator sintaksisi Case seçin bunun kimi:

    Case seçin İfadə
    Case Dəyər 1
    İfadənin nəticəsi Dəyər1-ə uyğundursa, hərəkətlər
    Case Dəyər 2
    İfadənin nəticəsi Dəyər2 ilə uyğun gəlirsə, hərəkətlər

    Başqa Dava
    İfadənin nəticəsi sadalanan Dəyər seçimlərindən heç birinə uyğun gəlmirsə, hərəkətlər
    Seçimi bitir

    Element Başqa Dava isteğe bağlıdır, lakin gözlənilməz dəyərləri idarə etmək tövsiyə olunur.

    Aşağıdakı nümunədə konstruksiyadan istifadə etməklə Case seçin Cari xananın doldurma rəngi içindəki dəyərdən asılı olaraq dəyişir:

    Case ActiveCell.Value Case is seçin<= 5 ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет Case 6, 7, 8, 9 ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Case 10 ActiveCell.Interior.Color = 65535 "Ячейка окрашивается в жёлтый цвет Case 11 To 20 ActiveCell.Interior.Color = 10498160 "Ячейка окрашивается в лиловый цвет Case Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End Select

    Yuxarıdakı nümunə bir element üçün müxtəlif yollarla necə dəyər təyin edə biləcəyinizi göstərir Case dizaynda Case seçin. Bu üsullar:

    Case Is<= 5 Beləliklə, açar sözdən istifadə etməklə Case Is dəyərin uyğun olub olmadığını yoxlaya bilərsiniz İfadələri formanın vəziyyəti <=5 .
    İş 6, 7, 8, 9 Beləliklə, dəyərin uyğun olub olmadığını yoxlaya bilərsiniz İfadələri sadalanan dəyərlərdən biri ilə. Siyahıda göstərilən dəyərlər vergüllə ayrılır.
    İş 10 Bu, dəyərin uyğun olub olmadığını yoxlayır İfadələri verilmiş dəyərlə.
    İş 11-20 Beləliklə, dəyərin uyğun olub olmadığını yoxlamaq üçün ifadə yaza bilərsiniz İfadələri formanın vəziyyəti 11-dən 20-yə qədər(“11.” bərabərsizliyinə ekvivalentdir<=значение<=20”).
    Başqa Dava Bu kimi, açar sözdən istifadə edərək Başqa, dəyərinin olması halında hərəkətlər göstərilir İfadələri sadalanan variantlardan heç birinə uyğun gəlmir Case.

    Şərtlərdən biri tapılan kimi müvafiq hərəkətlər yerinə yetirilir və strukturdan çıxır Case seçin. Yəni istənilən halda sadalanan filiallardan yalnız biri icra olunacaq Case.

    Şərtlər proqramlaşdırmada çox faydalıdır, çünki onlar bizə müəyyən edilmiş meyarlardan asılı olaraq hərəkətləri yerinə yetirməyə imkan verir (eyni prinsip aşağıdakı kimi istifadə olunur). ƏGƏR Excel funksiyaları).

    Şərti təyin edən ən mühüm funksiyadır ƏGƏR və indi bunun necə işlədiyini görəcəyik:

    Əgər [ŞƏRT BURADA] O zaman "=> ƏGƏR şərt doğrudursa, ONDA "Təlimatlar əgər doğrudursa, Else"=> ALSE "Yanlışsa, təlimatlar Sondursa

    Gəlin praktikliyə keçək və dəyişən dərsdə istifadə etdiyimiz nümunəyə qayıdaq. Bu prosedurun məqsədi xanada göstərilən sətirdən dəyəri ehtiva edən dialoq qutusunu açmaq idi F5:

    Bir hüceyrəyə hərf daxil etsəniz F5, bu xətaya səbəb olacaq. Biz bunun qarşısını almaq istəyirik.

    Alt dəyişənlər () "Dəyişənlərin elan edilməsi Soyadı sətir kimi, ad_ad sətir kimi, yaş tam ədəd, sıra_nömrəsi tam ədəd kimi "Dəyişənlərə qiymətlərin təyin edilməsi sətir_nömrəsi = Aralıq("F5") + 1 soyadı = Hüceyrələr(sətir_nömrəsi, 1) ad = Hüceyrələr(sətir_nömrəsi , 2) yaş = Hüceyrələr(sətir_nömrəsi, 3) "Dialoq qutusu MsgBox soyadı & " " & ad_ad & "," & yaş & "illər" Son Alt

    Daxil edilmiş dəyərin xanada olub-olmadığını yoxlayacaq şərt əlavə edək F5 kod icra edilməzdən əvvəl nömrə.

    Funksiyadan istifadə edəcəyik IsNumeric vəziyyəti yoxlamaq üçün:

    Alt dəyişənlər () "Əgər mötərizədəki dəyər (F5 xanası) rəqəmlidirsə (VƏ BUNA GÖRƏ ƏGƏR ŞƏRTİ DOĞRUDURsa), onda "sonradan gələn ifadələri yerinə yetirin, THEN If IsNumeric (Range ("F5")) Sonra "Dəyişənlərin Elan edilməsi Dim soyadı kimi Sətir, ad_ad Sətir kimi, yaş Tam ədəd, sıra_nömrə Tam ədəd kimi "Dəyişənlərə dəyərlərin təyin edilməsi sətir_nömrəsi = Aralıq ("F5") + 1 soyadı = Hüceyrələr (sətir_nömrəsi, 1) ad_ad = Hüceyrələr (sətir_nömrəsi, 2) yaş = Hüceyrələr ( sətir_nömrəsi, 3) "Dialoq Qutusu MsgBox soyadı & " " & birinci_ad & "," & yaş & "illər" Sondursa Son Alt

    Əgər qoyduğumuz şərt yerinə yetirilmirsə, təlimatları da yazmalıyıq:

    Alt dəyişənlər () Əgər IsNumeric (Range ("F5")) Əgər "Şərt doğrudursa "Dəyişənlərin elan edilməsi Soyadı Sətir kimi, ad_ad Sətir kimi, yaş Tam Ədəd, sətir_nömrəsi Tam Ədəd kimi "Dəyişənlərə qiymətlərin təyin edilməsi sətir_nömrəsi = Aralıq ("F5") + 1 soyad = Xanələr (sətir_nömrəsi, 1) ad_ad = Hüceyrələr (sətir_nömrəsi, 2) yaş = Hüceyrələr (sətir_nömrəsi, 3) "Dialoq qutusu MsgBox soyadı & " " & birinci_ad & "," & yaş & " illər " Əks halda "Şərt yerinə yetirilməyibsə "Dialoq qutusu: MsgBox xəbərdarlığı "Daxil edilmiş dəyər " & Aralıq ("F5") & " etibarlı deyil!" "F5 Range ("F5") xanasının məzmununun silinməsi). ClearContents End If End Sub

    İndi qeyri-rəqəmli dəyərlər heç bir problem yaratmayacaq.

    16 sıra verilənlərdən ibarət massivimizlə işləyərək növbəti addımımız row_number dəyişəninin "2-dən böyük və ya bərabər" və "17-dən kiçik və ya bərabər" olub olmadığını yoxlamaq olacaq.

    Ancaq əvvəlcə müqayisə operatorlarına nəzər salaq:

    və bu faydalı operatorlar:

    İndi yuxarıdakı şərtlərdən birini əlavə edək Müqayisə operatorları arasında:

    Alt dəyişənlər () Əgər IsNumeric (Range ("F5")) Sonra "Əgər ədədi dəyər Dim soyadı Sətir kimi, ad_ad Sətir kimi, yaş Tam Ədəd kimi, sətir_nömrəsi Tam ədəd kimi sətir_nömrəsi = Aralıq ("F5") + 1 Əgər sətir_nömrəsi > = 2 Və sətir_nömrəsi

    Əgər makromuzu daha praktik etmək istəyiriksə, əvəz edə bilərik 17 sətirlərin sayını ehtiva edən dəyişənə. Bu, hər dəfə bu limiti dəyişmədən seriala sətirlər əlavə etmək və silmək imkanı verəcəkdir.

    Bunu etmək üçün bir dəyişən yaratmalıyıq nb_sətirlər və bu xüsusiyyəti əlavə edin.

    Bu halda funksiyadan istifadə edirik WorksheetFunction.CountA funksiyasının analoqu olan COUNTA Excel-in özündə.

    Biz istəyirik ki, bu funksiya birinci sütundakı boş olmayan xanaların sayını saysın və nəticədə dəyişən dəyəri yazsın. nb_sətirlər:

    Alt dəyişənlər () Əgər IsNumeric (Range ("F5")) Sonra "ƏGƏR NUMBER Dim soyadı Sətir kimi, ad_ad Sətir kimi, yaş Tam Ədəd kimi, sətir_nömrəsi Tam Ədəd kimi, sətir_nömrəsi Tam Ədəd kimi Dim nb_sətirlər Tam Ədəd kimi sətir_nömrəsi = Aralıq ("F5") + 1 nb_sətirlər = WorksheetFunction.CountA (Range ("A:A")) "Sıra sayma funksiyası Əgər sətir_nömrəsi > = 2 və sətir_nömrəsi

    ElseIf

    ElseIf IF əmrindən sonra əlavə şərtlər əlavə etməyə imkan verir:

    Əgər [ŞƏRT 1] Onda "=> ƏGƏR şərt 1 doğrudursa, ONDA "Təlimatlar 1 ElseIf [ŞƏRT 2] Onda "=> ƏGƏR şərt 1 yanlışdırsa, lakin şərt 2 doğrudursa, onda "Təlimatlar 2 Else" => ELSE " Təlimatlar 3 Əgər bitərsə

    Əgər ŞƏRT 1 icra, Təlimat 1 icra olunacaq və ifadəni tərk edəcək ƏGƏR(bu ilə başlayır ƏGƏR və End If) ilə bitir). Əgər ŞƏRT 2 dəyərini alır" yalan ", sonra icra olunacaq Təlimat 2 və öz növbəsində geri dönərsə " yalan ", Sonra Təlimat 3(altında Başqa) icra olunacaq.

    Alt ballar_şərh () "Dəyişənlər Dim qeyd Tam ədəd kimi, hesab_şərh olaraq Sətir qeydi = Aralıq ("A1") "Qəbul edilən hesaba əsaslanan şərhlər Əgər qeyd = 6 O zaman score_comment = "Möhtəşəm top!" ElseIf not = 5 Sonra ball_comment = "Yaxşı xal" ElseIf qeyd = 4 Sonra ball_comment = "Qənaətləndirici xal" ElseIf not = 3 Sonra score_comment = "Qeyri-qənaətbəxş xal" ElseIf not = 2 Sonra score_comment = "Pis ball" ElseIf qeyd = 1 Sonra xal_comment = "Dəhşətli xal" Else score_comment = "Sıfır xal" Əgər "B1 xanasındakı şərh Aralığı ("B1") = ball_comment Son Alt

    seçin

    İstifadə etmək üçün alternativ var Əgərçoxları ilə ElseIf göstərişlər, yəni əmr seçin, bu tip vəziyyətlər üçün daha uyğundur.

    Operatorla makro nümunəsinə baxaq seçin:

    Alt ballar_şərh () "Dəyişənlər Dim qeyd Tam ədəd kimi , hesab_şərh olaraq Simli qeyd = Aralıq ("A1") "Alınan hesaba əsaslanan şərhlər İş qeydini seçin "

    Qeyd etmək lazımdır ki, digər müqayisə operatorlarından da istifadə edə bilərik:

    Case >=6 "əgər dəyər >=6 olarsa

    Müxtəlif mənaları olan nümunələr:

    Case Is = 6, 7 "əgər dəyər = 6 və ya 7 olarsa, 6, 7 "dəyər 6 və ya 7 deyilsə, 6-dan 10-a qədər "əgər dəyər = 6-dan 10-a qədər istənilən ədəddirsə