Operator warunkowy
Operator warunkowy VBA pozwala sprawdzić określony warunek i, w zależności od wyników sprawdzenia, wykonać tę lub inną akcję. Operator warunkowy jest więc sposobem na rozgałęzienie procesu obliczeniowego.
W VBA Istnieją 2 rodzaje operatorów warunkowych: liniowy i blokowy.
1. Liniowy operator warunkowy służy do wykonania dowolnego pojedynczego operatora, jeśli jakiś warunek jest prawdziwy.
Konstrukcja składniowa operatora liniowego ma dwie formy: niealternatywną, alternatywną.
Struktura niealternatywnego operatora warunkowego (wersja skrócona):
Jeśli<условие>Następnie<оператор 1>
Struktura alternatywnej instrukcji warunkowej (pełna wersja):
Jeśli<условие>Następnie<оператор 1>W przeciwnym razie<оператор 2>
gdzie
Jeśli , wtedy , inaczej - słowa zastrzeżone (jeśli, to inaczej);
<условие>- dowolne wyrażenie typu logicznego;
<оператор 1>, <оператор 2>- dowolnych operatorów językowych VBA.
Stanowisko. Wyrażenie warunkowe jest oceniane jako pierwsze.<условие>. Jeśli wynik to Prawdziwe (prawda), wtedy<оператор 1>, ale<оператор 2>pominięto. Jeśli wynik to Fałszywe (fałsz) wręcz przeciwnie<оператор 1>pominięto i wykonano<оператор 2>.
2. Operator warunkowy bloku jest używany, gdy warunek jest prawdziwy, konieczne jest wykonanie kilku instrukcji programu (blok instrukcji). Operator blokowy ma dwie formy: niealternatywną, alternatywną.
Struktura niealternatywnego operatora bloku (wersja skrócona))
Jeśli<условие>Następnie
<оператор1>
<оператор2>
…………….
<оператор n >
Zakończ, jeśli
gdzie
Zakończ, jeśli - wskazuje koniec bloku instrukcji Jeśli .
Struktura instrukcji bloku alternatywnego:
Jeśli<условие>Następnie
<оператор1>
<оператор2>
…………….
<оператор n >
W przeciwnym razie
<оператор1>
<оператор2>
…………….
<оператор n >
Zakończ, jeśli
Przykład 1
Sformułowanie problemu. Utwórz w standardowym module niestandardową procedurę obliczania równania postaci ax2 + bx + c = 0.
1. Dane początkowe:
a , b , c R
Wynik: x1, x2 R.
2. Wpisz w standardowym module projektu następującą procedurę użytkownika:
Prywatne poziomowanie podrzędne()
a = InputBox("a=", a)
b = Pole Wprowadzania("b=", b)
c = Pole Wprowadzania("c=", c)
d=b^2 - 4*a*c
Jeśli d >= 0 Wtedy
x1 = (-b + Sqr(d)) / (2 * a)
x2 = (-b - Sqr(d)) / (2 * a)
Skrzynka wiadomości (x1)
Skrzynka wiadomości (x2)
W przeciwnym razie
MsgBox("Brak rozwiązań")
Zakończ, jeśli
napis końcowy
Alternatywna instrukcja blokowa Jeśli Jest używany w tych przypadkach, gdy warunek jest spełniony, konieczne jest wykonanie jednego zestawu instrukcji programu, a jeśli nie, innego.
Oświadczenia IF mogą być zagnieżdżone w sobie. To zagnieżdżenie instrukcji jest przydatne, jeśli chcesz przetestować warunek pod innym warunkiem, który jest prawdziwy.
Zagnieżdżony format wyciągu Jeśli:
Jeśli<условие1>Następnie
Jeśli<условие2>Następnie
<оператор1>
<оператор2>
…………….
<оператор n >
W przeciwnym razie
<оператор1>
<оператор2>
…………….
< оператор n>
Zakończ, jeśli
Zakończ, jeśli
Przykład 2
Sformułowanie problemu. Utwórz niestandardową funkcję w standardowym module, aby znaleźć maksimum spośród trzech podanych liczb y 1 \u003d a + 2 * b; y 2 \u003d a * b + c; y 3 = c 2 + 1.
Technologia realizacji zadań:
1. Dane początkowe:
a , b , c R
Wynik: Max R.
2. Wpisz w standardowym module projektu następującą funkcję zdefiniowaną przez użytkownika:
Funkcja y (a,b,c)
y1 = a+2*b
y2 = a*b+c
y3 = c^2+1
Jeśli y1 > y2 Wtedy
Jeśli y1 > y3 Wtedy y = y1 W przeciwnym razie y = y3
W przeciwnym razie
Jeśli y2 > y3 Wtedy y = y2 W przeciwnym razie y = y3
Zakończ, jeśli
funkcja zakończenia
3. Oblicz pierwiastki równania kwadratowego z dowolnymi danymi początkowymi.
Podczas korzystania z zagnieżdżonych instrukcji Jeśli Ważne jest, aby nie mylić opcji łączenia warunków. Musisz pamiętać o zasadzie: alternatywa W przeciwnym razie jest uważany za należący do najbliższego operatora Jeśli nie mając oddziału W przeciwnym razie.
W VBA Zaprojektowany do pracy z wieloma operatorami Jeśli . Operatory te są używane w przypadkach, gdy konieczne jest uwzględnienie kilku innych warunków oprócz pierwotnego. Po to jest konstrukcja: Jeśli… Wtedy… Inaczej . W przeciwieństwie do instrukcji zagnieżdżonych, konstrukcja z wieloma instrukcjami Jeśli pozwala sprawdzić dodatkowy warunek, jeśli pierwotny warunek przyjmuje wartość Fałszywe .
Format nagrywania:
Jeśli<условие1>Następnie
<оператор1>
W przeciwnym razie<условие2>Następnie
<оператор2>
W przeciwnym razie
<.оператор3>
EndIf
Przykład 3
Sformułowanie problemu. Kierownik sprzedaży musi opracować funkcję, która pozwoli mu naliczać prowizje. Procent prowizji uzależniony jest od ilości sprzedanego towaru i naliczany jest zgodnie z następującą zasadą przedstawioną w tabeli 15.
Zasady naliczania prowizji
Tygodniowa wielkość sprzedaży, pocierać. |
Zamawiać, % |
0 do 9999 |
|
Od 10000 do 19999 |
|
Od 20000 do 39999 |
|
Ponad 40000 |
Technologia realizacji zadań:
1. Dane początkowe:
Sprzedaż Z .
Wynik: Prowizja R.
2. Zbuduj niestandardową funkcję naliczania prowizji w standardowym module:
Prowizja Funkcja (Sprzedaż)
Jeśli sprzedaż<= 9999 Then
Prowizja = Sprzedaż * 0,08
W przeciwnym razie sprzedaż<= 19999 Then
Prowizja = Sprzedaż * 0,1
W przeciwnym razie sprzedaż<= 39999 Then
Prowizja = Sprzedaż * 0,12
W przeciwnym razie
Prowizje = Sprzedaż * 0,14
Zakończ, jeśli
funkcja zakończenia
3. Oblicz.
W języku Visual Basic for Application (VBA) istnieje kilka sposobów zmiany kolejności wykonywania instrukcji. Struktury kontrolne w VBA są pod wieloma względami podobne do tych w innych językach programowania.Podstawowe struktury kontrolne VBA:
Instrukcja sterująca, jeśli to inaczej „Koniec, jeśli
Instrukcja ta zmienia kolejność wykonywania instrukcji w zależności od wyników testowania danego warunku (lub zbioru warunków)
Przykład:
Podtest, jeśli to()
iData = "paszulka"
Jeśli iData = „Excel” Wtedy
MsgBox "Nigdy nie zobaczysz tej wiadomości!!!"
ElseIf iData = "Biuro" Then
MsgBox "Przepraszamy, nie zobaczysz też tej wiadomości!!!"
W przeciwnym razie
MsgBox "Ta wiadomość i tak pojawi się", iData
Zakończ, jeśli
Uwagi:
Jeśli- słowo kluczowe wskazujące początek sprawdzania
iData- zmienna, której wartość będzie sprawdzana
Następnie- słowo kluczowe oznaczające koniec kontroli
MsgBox- wiadomość
W przeciwnym razie- słowo kluczowe wskazujące początek nowego czeku
Następnie- słowo kluczowe oznaczające koniec dodatkowej kontroli
MsgBox- wiadomość
W przeciwnym razie- słowo kluczowe oznaczające koniec bloku instrukcji wykonanych z pozytywnym wynikiem sprawdzenia oraz początek bloku instrukcji wykonanych z wynikiem negatywnym.
MsgBox- wiadomość
Zakończ, jeśli
W instrukcji If Then Else „End If” słowa kluczowe W przeciwnym razie I W przeciwnym razie są opcjonalne.
Do następnego oświadczenia kontrolnego
Ta instrukcja pozwala wykonać określone czynności żądaną liczbę razy. Takie instrukcje są zwykle nazywane pętlami.
Przykład:
Test podrzędny dla następnego()
Dla iCount = 1 do 100 Krok 2
ja = ja + 1
Następny
Uwagi:
Do
liczę- zmienna określająca ilość powtórzeń pętli.
1
- wartość początkowa licznika
W celu- słowo kluczowe oddzielające wartość początkową i końcową licznika
100
- wartość końcowa licznika
krok- słowo kluczowe określające krok licznika
2
- krok licznika (liczba)
Następny- słowo kluczowe, po osiągnięciu którego wartość licznika zmienia się o wartość kroku, po czym sterowanie ponownie przechodzi na początek pętli.
MsgBox
W instrukcji For Next słowo kluczowe krok jest opcjonalne. Jeśli go nie ma, krok wykonania licznika będzie równy 1.
ważny Krok licznika musi być liczbą. Jeśli krok licznika zostanie określony jako liczba ujemna, to wartość licznika będzie się zmniejszać z każdym cyklem.
Przykład z odliczaniem:
Test podrzędnyDlaNastępnego2()
Dla iCount = 300 do 1 Krok -3
ja = ja + 1
Jeśli iCount = 153, to wyjdź po
Następny iCount
MsgBox "Liczba powtórzeń: " & i
Zwróć uwagę na:
Jeśli iCount = 153 Następnie- w tym kodzie VBA zastosowaliśmy instrukcję If Then Else, którą już znamy
Wyjdź dla
Następny iCount- w kodzie znajduje się zmienna (licznik), która znajduje się po słowie kluczowym. Podobna składnia jest z reguły używana do wizualnego określenia końca pętli, jeśli w kodzie VBA jest wiele podobnych instrukcji.
Podczas gdy oświadczenie kontrolne Wend
Ta instrukcja umożliwia wykonanie określonych czynności, o ile spełniony jest określony warunek.
Przykład:
Podtest podczas Wend()
Podczas gdy iCount iCount = iCount + 1
Wend
Uwagi:
Dopóki- słowo kluczowe oznaczające początek cyklu
iCount - warunek, pod jakim ta instrukcja zostanie wykonana
Wend
MsgBox- komunikat o ilości powtórzeń
Wykonaj instrukcję kontroli pętli
Ta instrukcja pozwala na wykonywanie określonych czynności nie tylko tak długo, jak spełniony jest określony warunek, ale na odwrót, dopóki nie zostanie spełniony określony warunek.
Przykład:
PodtestDoLoop()
Rób dopóki iCount >= 100
iCount = iCount + 1
pętla
MsgBox "Liczba powtórzeń: " & iCount
Uwagi:
Zrobić- słowo kluczowe oznaczające początek cyklu
Aż do- słowo kluczowe wskazujące na obecność schorzenia
iCount >= 100- warunek, pod jakim ta instrukcja zostanie wykonana
pętla- słowo kluczowe oznaczające koniec cyklu
MsgBox- komunikat o ilości powtórzeń
PodtestDoLoop2()
Zrobić
iCount = iCount + 1
Jeśli iCount = 50, to zakończ Wykonaj
Pętla do iCount = 100
MsgBox "Liczba powtórzeń: " & iCount
Zwróć uwagę na:
Jeśli Liczba = 50 Następnie- w tym kodzie VBA ponownie zastosowaliśmy znaną nam już instrukcję If Then Else
Wyjście Wykonaj- instrukcja oznaczająca wczesne wyjście z pętli
iCount = 100- warunek, pod jakim ta instrukcja zostanie wykonana
Notatka:
Warunek podany na końcu pętli gwarantuje, że zostanie ona wykonana przynajmniej raz. Uważaj na instrukcje While Wend, Do Loop, ponieważ jeśli źle ustawisz warunek, możesz uzyskać prawie perpetuum mobile.
Instrukcja sterująca Wybierz przypadek „Zakończ wybór
Instrukcja ta wykonuje jeden z kilku fragmentów kodu w zależności od wyniku wartości zmiennej lub wyrażenia.
Przykład:
PodtestWybierz przypadek()
Wybierz przypadek inumeryczny
Przypadek 1
Przypadek 2, 5
MsgBox "Nie powinieneś widzieć tego komunikatu"
Przypadek 10 do 13
MsgBox "Nie powinieneś widzieć tego komunikatu"
Sprawa jest > 14
MsgBox "To jest wiadomość, którą powinieneś zobaczyć"
Przypadek inny
MsgBox "Ten komunikat pojawi się, jeśli zmienna to End Select
Uwagi:
Wybierz przypadek
inumeryczny- zmienna lub wyrażenie, którego wartość determinuje wybór fragmentu kodu VBA do wykonania
Przypadek 1- pierwsza wartość do porównania.
Jeżeli wartość zmiennej do niej pasuje, to zostanie wykonany fragment kodu następujący po Case, ale przed kolejnym kluczem Case, wtedy instrukcja zakończy swoją pracę. W przeciwnym razie sprawdzanie będzie kontynuowane.
Przypadek 2, 5- druga wartość opcji.
Przypadek 10 do 13- trzecia wartość opcji.
Sprawa jest > 14- czwarta opcja.
MsgBox- komunikat do wyświetlenia w tym przypadku
Przypadek inny- słowa kluczowe oznaczające wykonanie kodu, jeśli żadna z poprzednich opcji nie pasuje.
Koniec Wybierz- słowo kluczowe oznaczające koniec instrukcji
W instrukcji Select Case „End Select słowo kluczowe Przypadek inny jest opcjonalne.
Dla każdej następnej instrukcji kontrolnej
Ta instrukcja umożliwia wykonanie określonych czynności z każdym obiektem rodziny lub elementem tablicy.
Przykład z obiektem Range:
Test podrzędny dla każdego następnego zakresu()
ja = ja + 1
iCell.Value = "(!LANG:Komórka #" & i
!}
Następny
MsgBox "Liczba komórek: " & i
Uwagi:
Dla każdego- słowa kluczowe wskazujące początek instrukcji
iCell- zmienna, do której przypisane są wartości elementów grupy (tablicy lub rodziny), aby pracować z elementami tablicy, zmienna musi należeć do typu Variant.
w- słowo kluczowe oddzielające zmienną od grupy
Zakres("A1:C5")- grupa, tj. tablica lub rodzina obiektów.Liczba iteracji pętli zależy od liczby elementów w grupie.Przy pierwszym wykonaniu pętli zmiennej przypisywana jest wartość pierwszego elementu grupy, a następnie wszystkie kolejne.
Następny- słowo kluczowe, po osiągnięciu którego kontrolka ponownie przechodzi na początek pętli.
MsgBox- komunikat o liczbie elementów grupy.
W tym przypadku użycie podobnej liczby komórek w obiekcie Range nie jest najlepszym sposobem, ponieważ ten obiekt ma właściwość, która znacznie lepiej poradzi sobie z tym zadaniem: Obiekt Range: jego właściwości i metody
Przykład manipulowania obiektem Range:
Podtest dla każdego następnego zakresu zmian()
Dla każdej komórki iCell w zakresie ("A1:C5")
i = i + 1: iCell.Value = i
Jeśli iCell.Value 5 Wtedy
iCell.Rozmiar.Czcionki = 15
iCell.Interior.ColorIndex = 50
InaczejJeżeli iCell.Value = 13 Lub iCell.Value = 5 Wtedy
iCell.Rozmiar.Czcionki = 20
iCell.Interior.ColorIndex = 3
W przeciwnym razie
iCell.Wyczyść
Zakończ, jeśli
Zwróć uwagę na:
- w tym kodzie VBA, aby sprawdzić wartości w komórce, zastosowaliśmy znaną nam już instrukcję If Then Else.
- w zależności od tego, który warunek przeszedł test, wykonywany jest określony fragment kodu, który wykorzystuje różne właściwości obiektu Range.
Przykład z rodziną Worksheets:
Test podrzędny dla każdego następnego arkusza()
Dla każdego iList w arkuszach roboczych
ja = ja + 1
iNameList = iNameList & Chr(10) & iList.Name
Następny
MsgBox "Liczba arkuszy roboczych: " & i & Chr(10) & _
"Nazwy arkuszy: " & iNameList
W tym przypadku użycie podobnej liczby arkuszy nie jest najlepszym sposobem, ponieważ ten obiekt ma również właściwość, która znacznie lepiej poradzi sobie z tym zadaniem.
Podstawowe operatory języka VBA
Komentarze (0)
3.1. Zasady nagrywania operatora
Pisząc operatorów, musisz przestrzegać następujących zasad:
Każda nowa instrukcja jest napisana w nowej linii.
Aby napisać wiele instrukcji w jednym wierszu, oddziel je dwukropkiem (:).
Jeśli instrukcja nie mieści się w jednym wierszu, musisz umieścić spację i podkreślenie (_) na końcu wiersza, a następnie kontynuować część, która nie zmieściła się w następnym wierszu.
3.2. operator przypisania
Operator przypisania jest używany, gdy zmienna musi mieć przypisaną nową wartość. Ma następującą składnię:
VARIABLE_NAME= WYRAŻENIE
Najpierw oceniane jest wyrażenie po prawej stronie, a następnie wynik przypisywany jest do zmiennej po lewej stronie.
Na przykład. Napisz następujące wyrażenie matematyczne, używając operatora przypisania:
W VBA wyrażenie to można zapisać jako następującą instrukcję:
Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))
3 .3. Oświadczenia we/wy
3 .3.1. Operator i funkcja MsgBox
Operator MsgBox wyświetla informacje w oknie dialogowym i ustawia tryb oczekiwania na kliknięcie przycisku użytkownika.
Ma następującą składnię:
MsgBox Wiadomość[,Przyciski][, Tytuł]
Argumenty:
Wiadomość - obowiązkowy argument określający wyświetlany komunikat informacyjny w oknie. Może składać się z kilku wierszy tekstu połączonych znakiem & . Użycie w tym argumencie Chr(13) powoduje przerwanie wiersza podczas wyprowadzania informacji.
guziki - wartość tego argumentu określa kategorie przycisków, które pojawiają się w oknie. Wartość argumentu button określa również, czy w oknie pojawia się ikona. Jeśli nie określisz, które przyciski mają być wyświetlane w oknie komunikatu, używana jest wartość domyślna odpowiadająca przyciskowi OK. W tabeli. 3.1 pokazuje możliwe kombinacje przycisków i ikon w oknie wiadomości.
nagłówek - ustawia tytuł okna.
Funkcjonować MsgBox zwraca liczbę całkowitą wskazującą, który przycisk został kliknięty w oknie dialogowym.
Tabela 3.1. Prawidłowe wartości zmiennych przycisku
Wyświetlacz |
Argument |
Przycisk OK |
|
Przyciski OK i Anuluj |
|
Przyciski tak i nie |
|
Przyciski Tak, Nie i Anuluj |
|
Przyciski Przerwij, Ponów i Ignoruj |
VbAbortRetryIgnoruj |
Przyciski Ponów i Anuluj. |
|
znak informacyjny |
|
Znak zapytania |
|
Wykrzyknik |
Na przykład. Wyświetl komunikat o aktualnej dacie.
MsgBox "Dzisiaj w kalendarzu" & Data , "Uwaga"
W rezultacie wyświetli się następujące okno (rys.3.1).
Po kliknięciu przycisku OK okno komunikatu zostanie zamknięte, a wykonywanie programu zostanie wznowione od instrukcji bezpośrednio po wywołaniu MsgBox.
3.3.2. Funkcjonować Pole wprowadzania
Funkcjonować Pole wprowadzania dokonuje wprowadzania wartości zmiennych za pomocą okna wprowadzania i ma następującą składnię:
Nazwa_zmiennej = Pole wprowadzania(Wiadomość[, Tytuł] )
Argumenty:
Wiadomość jest wymaganym argumentem. Określa komunikat informacyjny w oknie, zwykle wyjaśniający znaczenie wartości wejściowej
nagłówek - ustawia tytuł okna.
Na przykład, Wprowadź wartość zmiennej N z klawiatury, podając domyślną wartość 10.
Możesz do tego użyć następującego operatora:
N = InputBox("Wprowadź N", "Dane wejściowe",10)
W efekcie wyświetli się następujące okno do wpisania wartości zmiennej N (rys.3.2).
Jeżeli domyślna wartość jest odpowiednia dla użytkownika, to po kliknięciu przycisku OK okno wejściowe zostanie zamknięte, zmiennej N zostanie przypisana wartość 10, a wykonywanie programu zostanie wznowione od instrukcji bezpośrednio po wywołaniu. Pole wprowadzania.
Jeśli domyślna wartość nie odpowiada użytkownikowi, przed kliknięciem przycisku OK należy wprowadzić żądaną wartość zmiennej N.
3 .4. Warunkowe oświadczenie IF
Do zaimplementowania rozgałęzionego procesu obliczeniowego w VBA używany jest operator Jeśli…Wtedy…W przeciwnym razie, co jest najprostszą formą sprawdzania stanu. Ma następującą składnię:
JeśliSTAN: SCHORZENIENastępnieOPERATOR_1milseOPERATOR_2
OPERATOR_1 jest wykonywany, jeśli STAN: SCHORZENIE prawda, inaczej wykonane OPERATOR_2. W tym przypadku instrukcja If…Then…Else jest zapisana w jednym wierszu.
STAN: SCHORZENIE jest wyrażeniem logicznym. Wynik wyrażenia jest zawsze typu logicznego. Wyrażenie może być proste lub złożone. Pisząc proste warunki można wykorzystać wszystkie możliwe operacje relacyjne wskazane w Tabeli 1. 3.2.
stół3 .2. Relacje logiczne
Operacja |
Imię |
Wyrażenie |
Wynik |
Prawda, jeśli A jest równe B |
|||
Prawda, jeśli A nie jest równe B |
|||
Prawda, jeśli A jest większe niż B |
|||
Prawda, jeśli A jest mniejsze niż B |
|||
Więcej lub równe |
Prawda, jeśli A jest większe lub równe B |
||
Mniejszy lub równy |
Prawda, jeśli A jest mniejsze lub równe B |
Z prostych warunków tworzy się złożone warunki, stosując operacje logiczne i nawiasy. Lista operacji logicznych znajduje się w tabeli. 3.3.
stół3 .3. Operacje logiczne
Imię |
Wyrażenie |
Wynik |
|||
Boole'a |
|||||
logiczne AND |
|||||
Logiczne OR |
W instrukcji warunkowej można użyć bloku instrukcji zamiast dowolnej instrukcji. W tym przypadku operator warunkowy wygląda następująco:
JeśliSTAN: SCHORZENIENastępnie
OPERATOR_BLOCK_1
OPERATOR_BLOCK_2
Koniec IF
W instrukcji warunkowej można przetestować wiele warunków. W tym przypadku operator warunkowy wygląda następująco:
JeśliWARUNEK_1Następnie
OPERATOR_BLOCK_1
W przeciwnym razieWARUNEK_2Następnie
OPERATOR_BLOCK_2
W przeciwnym razie
koniecJeśli
Przykład 1. Napisz część programu dla algorytmu z ryc. 3.3.
Przykład 2 Napisz część programu dla algorytmu z ryc. 3.4.
3.5. Wybierz oświadczenie dotyczące sprawy
Instrukcja Select Case jest wygodna w użyciu, gdy w zależności od wartości jakiegoś wyrażenia, które ma skończony zbiór poprawnych wartości, musisz wykonać różne czynności. Dotyczy to również instrukcji warunkowych, ale ma inną formę:
Wybierz przypadekEXPRESSION_CHECKED
walizkaVALUES_1
OPERATORS_1
walizkaWARTOŚCI_ 2
OPERATORZY_ 2
. . .
walizkaVALUES_N
OPERATORZY_N
[ walizkaW przeciwnym razie
INACZEJ_ OPERATORZY]
Koniec Wybierz
EXPRESSION_CHECKED może być dowolnego typu skalarnego z wyjątkiem rzeczywistego. WARTOŚCI składają się z dowolnej liczby wartości lub zakresów, oddzielonych od siebie przecinkami.
Rodzaj WARTOŚCI musi pasować do typu EXPRESSION_CHECKED.
Najpierw obliczone EXPRESSION_CHECKED. Jeśli jego wartość pasuje do jednej z wartości VALUES_I, następnie OPERATORS_I Koniec Wybierz. Jeśli jego wartość nie pasuje do żadnej z wartości VALUES_I, następnie ELSE_OPERATORS i kontrola jest przekazywana operatorowi stojącemu po Koniec Wybierz
Na przykład. Napisz część programu dla algorytmu z ryc. 3.5, która określa wartość zmiennej S w zależności od wartości zmiennej n.
3.6. Instrukcje pętli
Aby zaimplementować cykliczny proces obliczeniowy, tj. Wielokrotne wykonanie jednego lub więcej operatorów, używany jest operator cyklu W następnym, który ma następującą składnię:
DoLICZNIK=WARTOŚĆ POCZĄTKOWAToEND_VALUEkrokKROK
OPERATOR_BLOCK
OPERATOR_BLOCK
NastępnyLICZNIK
Dla…Następna pętla iteruje przez wartości zmiennej LICZNIK, który jest parametrem pętli, od wartości początkowej do końcowej z określonym krokiem zmiany. Gwarantuje to, że blok instrukcji ciała pętli jest wykonywany z każdą nową wartością licznika. Jeśli krokKROK nie ma go w konstrukcji, to domyślnie przyjmuje się, że krok jest równy 1. Według operatora Wyjdź dla możesz wcześniej wyjść z instrukcji loop LICZNIK osiąga ostatnią wartość.*
Aby iterować po obiektach z grupy podobnych obiektów, takich jak komórki z zakresu lub elementy tablicy, wygodnie jest użyć operatora pętli Do…Każdy…Następny.
Dla każdegoElementwGrupa
BLOK_ OPERATORZY
OPERATOR_BLOCK
NastępnyElement
W VBA inne instrukcje pętli służą do organizowania pętli z nieznaną liczbą powtórzeń z wyprzedzeniem:
pętle z warunkiem wstępnym - ZrobićDopóki … pętla,
ZrobićAż do … pętla;
pętle z warunkiem końcowym - Zrobić … pętlaDopóki,
Zrobić … pętlaAż do.
Poniżej znajduje się składnia tych instrukcji pętli:
Pętla z warunkiem wstępnymZrobić Dopóki … pętla
Czy podczasSTAN: SCHORZENIE
OPERATOR_BLOCK
OPERATOR_BLOCK
Pętla z warunkiem wstępnymZrobić Aż do … pętla
ZrobićAż doSTAN: SCHORZENIE
OPERATOR_BLOCK
OPERATOR_BLOCK
Pętla z warunkiem końcowymZrobić … pętla podczas
BLOK_ OPERATORZY
OPERATOR_BLOCK
pętla podczasSTAN: SCHORZENIE
Pętla z warunkiem końcowymZrobić … Powtarzaj dopóki
BLOK_ OPERATORZY
OPERATOR_BLOCK
Powtarzaj dopókiSTAN: SCHORZENIE
Operator ZrobićWhie…Pętla zapewnia, że blok instrukcji jest powtarzany wiele razy, aż STAN: SCHORZENIE jest obserwowany, a operator
Inne wiadomości
Podejmowanie decyzji pozwala programistom kontrolować przebieg wykonywania skryptu lub jednej z jego sekcji. Wykonywanie jest kontrolowane przez jedną lub więcej instrukcji warunkowych.
Poniżej znajduje się ogólny widok typowej struktury decyzyjnej występującej w większości języków programowania.
VBA udostępnia następujące rodzaje rozwiązań. Kliknij poniższe linki, aby sprawdzić ich szczegóły.
Jeśli...To - Jeśli to
Instrukcja If składa się z wyrażenia logicznego, po którym następuje jedna lub więcej instrukcji. Jeśli warunek ma nazwę True, wykonywane są instrukcje w warunku Jeśli(s). Jeśli warunek ma nazwę False, wykonywane są instrukcje po pętli If.
Składnia
Poniżej znajduje się składnia instrukcji If w języku VBScript.
If(wyrażenie_logiczne) Then Instrukcja 1 ..... ..... Instrukcja n End If
schemat przepływu
przykład
Private Sub if_demo_Click() Dim x As Integer Dim y As Integer x = 234 y = 32 If x > y Then MsgBox "X jest większe niż Y" End If End Sub
X jest większe niż Y
Jeśli instrukcja składa się z wyrażenia logicznego, następuje jedna lub więcej instrukcji.
if..else oświadczenie
Instrukcja If składa się z wyrażenia logicznego, po którym następuje jedna lub więcej instrukcji. Jeśli warunek ma nazwę True, wykonywane są instrukcje w warunku Jeśli(s). Jeśli warunek zostanie nazwany False, wykonywane są instrukcje w Else Part.
Składnia
Poniżej znajduje się składnia instrukcji If Else w języku VBScript.
If(wyrażenie_logiczne) Then Stwierdzenie 1 ..... ..... Stwierdzenie n Else Stwierdzenie 1 ..... .... Stwierdzenie n End If
schemat przepływu
przykład
W celach demonstracyjnych znajdźmy największą z dwóch liczb Excela za pomocą funkcji.
Private Sub if_demo_Click() Dim x As Integer Dim y As Integer x = 234 y = 324 If x > y Then MsgBox "X jest większe niż Y" Else Msgbox "Y jest większe niż X" End If End Sub
Gdy powyższy kod jest wykonywany, daje następujący wynik.
Y jest większe niż X
W przeciwnym razie instrukcja składa się z wyrażenia logicznego, po którym następuje jedna lub więcej instrukcji. Jeśli warunek ma wartość True, wykonywane są instrukcje zawarte w instrukcjach If. Jeśli warunek jest fałszywy, wykonywana jest Else część skryptu.
if ... elseif..else oświadczenie
Instrukcja If, po której następuje jedna lub więcej instrukcji ElseIf, które składają się z wyrażeń logicznych, po których następuje domyślna instrukcja else, która jest wykonywana, gdy cały warunek stanie się fałszywy.
Składnia
Poniżej znajduje się składnia instrukcji If Elseif-Else w języku VBScript.
If(wyrażenie_logiczne) Then Stwierdzenie 1 ..... ..... Stwierdzenie n ElseIf (wyrażenie_logiczne) Then Stwierdzenie 1 ..... .... Stwierdzenie n ElseIf (wyrażenie_logiczne) Then Stwierdzenie 1 ..... . ... Instrukcja n Else Instrukcja 1 ..... .... Instrukcja n End If
schemat przepływu
przykład
W celach demonstracyjnych znajdźmy największą z dwóch liczb Excela za pomocą funkcji.
Private Sub if_demo_Click() Dim x As Integer Dim y As Integer x = 234 y = 234 If x > y Then MsgBox "X jest większe niż Y" ElseIf y > x Then Msgbox "Y jest większe niż X" Else Msgbox "X i Y są RÓWNE” Koniec Jeśli Koniec Sub
Gdy powyższy kod jest wykonywany, daje następujący wynik.
X i Y są RÓWNE
Jeśli po instrukcji następuje jedna lub więcej instrukcji ELSEIF, które składają się z wyrażeń logicznych, po których następuje opcjonalna instrukcja else, która jest wykonywana, gdy wszystkie warunki staną się fałszywe.
zagnieżdżone instrukcje if
Instrukcja If lub ElseIf w innej instrukcji If lub ElseIf. Wewnętrzne instrukcje If są wykonywane na wierzchu zewnętrznych instrukcji If. Pozwala to VBScript na łatwe radzenie sobie ze złożonymi warunkami.
Składnia
Poniżej znajduje się składnia instrukcji Nested If w języku VBScript.
If(wyrażenie_logiczne) Then Stwierdzenie 1 ..... ..... Stwierdzenie n If(wyrażenie_logiczne) Then Stwierdzenie 1 ..... ..... Stwierdzenie n ElseIf (wyrażenie_logiczne) Then Stwierdzenie 1 ..... ....Stwierdzenie n Else Stwierdzenie 1 ..... ....Stwierdzenie n End If Else Stwierdzenie 1 Stwierdzenie n End If
przykład
W celach demonstracyjnych znajdźmy typ liczby dodatniej za pomocą funkcji.
Private Sub nested_if_demo_Click() Dim a As Integer a = 23 Jeśli a > 0 Then MsgBox "Liczba jest liczbą DODATNIĄ" Jeśli a = 1 Then MsgBox "Liczba nie jest ani pierwsza, ani złożona" InaczejJeśli a = 2 Then MsgBox "Liczba jest jedyną parzystą liczbą pierwszą" W przeciwnym razie a = 3 Then MsgBox "Liczba jest najmniej nieparzystą liczbą pierwszą" Else MsgBox "Liczba NIE jest równa 0,1,2 ani 3" Koniec, jeśli inaczej a< 0 Then MsgBox "The Number is a NEGATIVE Number" Else MsgBox "The Number is ZERO" End If End Sub
Gdy powyższy kod jest wykonywany, daje następujący wynik.
Liczba jest liczbą POZYTYWNĄ
Liczba NIE JEST 0,1,2 ani 3
Instrukcja If lub ElseIf wewnątrz innej instrukcji if lub ELSEIF.
Przełącz oświadczenie
Gdy użytkownik chce wykonać grupę instrukcji w zależności od wartości wyrażenia, używana jest wielkość liter. Każda wartość nazywana jest przypadkiem, a zmienna jest dołączana w zależności od każdego przypadku. Instrukcja Case Else jest wykonywana, jeśli wyrażenie testowe nie pasuje do żadnego z przypadków określonych przez użytkownika.
Case Else jest opcjonalną instrukcją w Select Case, jednak dla dobrych praktyk programistycznych zawsze dostępna jest instrukcja Case Else.
Składnia
Poniżej znajduje się składnia instrukcji Switch w języku VBScript.
Wybierz Wyrażenie Case Case listawyrażeń1 instrukcja1 instrukcja2 .... ....wypowiedź1n Case listawyrażeń2 instrukcja1 instrukcja2 .... .... Case listawyrażeńn instrukcja1 instrukcja2 .... .... Case Else elsestatement1 elsestatement2 .... .. .. Koniec Wybierz
przykład
W celach demonstracyjnych znajdźmy typ liczby całkowitej za pomocą funkcji.
Private Sub switch_demo_Click() Dim MyVar As Integer MyVar = 1 Wybierz przypadek MyVar Przypadek 1 MsgBox "Liczba jest najmniejszą liczbą złożoną" Przypadek 2 MsgBox "Liczba jest jedyną parzystą liczbą pierwszą" Przypadek 3 MsgBox "Liczba jest najmniej nieparzystą Numer pierwszy" Sprawa Else MsgBox "Nieznany numer" End Select End Sub
Gdy powyższy kod jest wykonywany, daje następujący wynik.
Liczba jest najmniej złożoną liczbą
Instrukcja switch umożliwia testowanie zmiennej pod kątem równości z listą wartości.
ten JEŚLI funkcja w VBA jest jednym z najczęściej używanych ze wszystkich stwierdzeń. Funkcja JEŻELI sprawdza, czy określony warunek jest spełniony, czy nie. Funkcja JEŻELI w VBA działa nieco inaczej niż w programie Excel. W programie Excel funkcja JEŻELI wykonuje dwie rzeczy: Sprawdza, czy dany warunek ma wartość PRAWDA czy FAŁSZ, a następnie zwraca wartość do użycia na podstawie oceny, tj. JEŻELI ( warunek, wartość_zwrotu_jeśli_warunek_prawda, wartość_zwrotu_jeśli_warunek_fałsz). Jednak funkcja JEŻELI w VBA wykonuje tylko pierwszą część, tj. sprawdź, czy warunek ma wartość TRUE lub FALSE. Kroki, które należy wykonać w każdym scenariuszu, zgodnie z opisem przy użyciu dodatkowej instrukcji THEN.
Korzystanie z prostej funkcji JEŻELI w VBA
Oto przykład JEŚLI funkcja. Ten fragment kodu VBA po prostu sprawdza, czy określony warunek (tj. 1 > 4) ma wartość PRAWDA czy FAŁSZ. W tym przypadku określiliśmy tylko kroki, które należy wykonać, gdy warunek ma wartość TRUE. W takim przypadku wynik zostanie wyświetlony na ekranie. Jeśli funkcja miałaby ocenić wartość FALSE, kod VBA nic nie zrobi.
1 | Sub JEŻELI_FUNCTION() |
ten NASTĘPNIE Instrukcja jest zasadniczo dyrektywą wskazującą, że kroki następujące bezpośrednio po niej mają zostać wykonane, jeśli warunek tuż przed, jeśli ma wartość TRUE.
Funkcja JEŻELI zwykle kończy się deklaracją KONIEC JEŻELI, która informuje aplikację, że jest to ostatni wiersz funkcji JEŻELI. Poniżej podano nieco krótszą postać funkcji JEŻELI. Zauważ, że instrukcja END IF została z tego wyeliminowana, a zatem trzy wiersze kodu zostały scalone w jeden.
Sub IF_FUNCTION_SHORT() |
Jednak tego formularza należy używać tylko wtedy, gdy nie ma W PRZECIWNYM RAZIE lub JEŚLI JEŚLI potrzebne są oświadczenia. Przyjrzyjmy się, czym one są i jak pomagają ulepszyć funkcję IF.
Używanie funkcji JEŻELI z ELSE w VBA
W powyższym przykładzie widzieliśmy, że funkcja JEŻELI byłaby w stanie wykonać kroki tylko wtedy, gdy warunek zostanie oceniony jako PRAWDA. Ale co, gdybyśmy chcieli określić kroki, które należy wykonać, gdy którykolwiek z warunków zostanie spełniony. Jednym ze sposobów uzyskania rozgałęzienia funkcji JEŻELI jest użycie instrukcji ELSE. Mówiąc najprościej, instrukcja ELSE powoduje, że aplikacja wykonuje kroki wymienione w bloku ELSE, gdy warunek określony w klauzuli IF ma wartość FALSE.
W poniższym przykładzie kodu VBA warunek w funkcji JEŻELI ma wartość false, kroki wymienione w bloku ELSE są wykonywane z wynikiem, że na ekranie pojawia się komunikat „1 jest mniejsze niż 4”. Do bloku można dodać wiele kroków, aby wszystkie były wykonywane jeden po drugim.
1 | Sub IF_ELSEIF_FUNCTION() |
Używanie funkcji JEŻELI z ELSEIF i ELSE: w VBA
Oświadczenie ELSE może być obsługiwane przez instrukcje ELSEIF. Są one zwykle używane do sprawdzania określonych warunków i jeśli wszystkie z nich mają wartość FALSE, kroki określone w warunku ELSE zostaną ostatecznie wykonane. Instrukcja IF sprawdzi dany warunek. Jeśli ten warunek okaże się FALSE, zostanie sprawdzony warunek określony w pierwszej instrukcji ELSEIF. Jeśli to również okaże się FAŁSZ, warunek określony w drugiej instrukcji ELSEIF zostanie sprawdzony i tak dalej i tak dalej. Jeśli wszystkie warunki określone w instrukcjach IF i ELSEIF okażą się FALSE, domyślnie zostaną wykonane kroki wymienione w ostatnim bloku ELSE:. Proszę pamiętać, że jeśli istnieje wiele instrukcji ELSEIF, pierwsza z nich, która ma wartość TRUE, zostanie wykonana, a po jej zakończeniu wykonanie kodu zostanie przeniesione do instrukcji END IF. Nawet jeśli istnieje wiele warunków ELSEIF, które mają wartość TRUE, zostanie wykonany tylko pierwszy, który ma wartość TRUE.
1 |
|
W poniższym przykładzie najpierw sprawdzany jest warunek JEŻELI. Ponieważ zwraca FALSE, oceniany jest pierwszy warunek ELSEIF, a następnie drugi. Ponieważ żaden z nich nie ma wartości TRUE, wykonywane są kroki wymienione w warunku ELSE:.
1 | Sub IF_ELSEIF_ELSE_FUNCTION() |
Szybka wskazówka – jak sprawić, by instrukcje IF działały szybciej
Oba fragmenty kodu wyglądają podobnie. Zamieniono dwa warunki ELSEIF w drugiej funkcji. Jak myślisz, który z poniższych fragmentów kodu VBA działa szybciej?:
Zakończ, jeśli
Dalej ja
Minutnik MsgBox - t
napis końcowy
Odpowiedź brzmi, że druga działa znacznie szybciej niż pierwsza. Czemu? Ponieważ drugi potrzebuje aplikacji, aby przejść przez krótsze wiersze kodu, zanim znajdzie warunek, który ma wartość TRUE. Pamiętaj, że pierwszy warunek ELSEIF, który jeśli zostanie znaleziony TRUE, zostanie wykonany, a żaden inny warunek nie zostanie oceniony, nawet jeśli miałby również mieć wartość TRUE. W pierwszym fragmencie kodu VBA funkcja ELSEIF w wierszu 6 przyjmuje wartość TRUE, podczas gdy w drugim wierszu 5 spełnia kryteria. Zasadniczo im bardziej prawdopodobny jest, że warunek zostanie oceniony jako PRAWDA, tym wcześniej powinien zostać umieszczony w kodzie VBA, a wszystko inne jest takie samo.