Umieszczanie przycisków w arkuszu
Z menu Narzędzia należy wybrać Dostosuj i zakładkę Paski narzędzi i zaznaczyć Przybornik formantów.
Z przybornika wybrać Przycisk polecenia i umieścić za pomocą myszki w arkuszu.
Klikając dwukrotnie na przycisku przechodzimy do edytora Visual Basic.
Adresowanie komórek w VB
W arkuszu kalkulacyjnym każda z komórek ma określony adres przez numer kolumny i wiersza, na przecięciu których leży. Kolumny oznaczone są kolejnymi literami, wiersze liczbami. I tak
w tabeli poniżej, przedstawiającej fragment arkusza kalkulacyjnego, komórka, w której znajduje się litera x, ma adres C1.
W Visual Basicu komórki arkusza adresowane są za pomocą liczb, przy czym pierwszą liczbą określa się wiersz, a drugą kolumnę. W tabelce poniżej przedstawiono odpowiednie adresy komórek w Excelu i Visual Basicu. Dodatkowo, by zaznaczyć, że odwołujemy się do komórki arkusza, musimy liczby oddzielić przecinkiem, umieścić w nawiasie okrągłym i napisać przed nimi słowo Cells (ang. komórki). W ten sposób w trakcie wykonywania program użyje zawartości zaadresowanej przez komórki znajdującej się w arkuszu, z którego program został wywołany.
Jeżeli się zdarzy, że odniesiemy się do komórki znajdującej się w innym arkuszu, musimy wtedy poprzedzić wywołanie nazwą tego arkusza, np. Arkusz2.Cells(1,3).
|
A |
B |
C |
D |
E |
1 |
|
|
x |
|
|
2 |
|
|
|
|
|
3 |
|
|
|
|
|
4 |
|
|
|
|
|
Arkusz Excel |
Visual Basic |
|
|
B3 |
Cells(3,2) |
E2 |
Cells(2,5) |
Zadanie do wykonania:
Uzupełnij tabelkę wpisując odpowiednie adresy komórek.
EXCEL |
Visual Basic |
A1 |
|
B7 |
|
|
Cells(3,3) |
G8 |
|
H1 |
|
|
Cells(1,2) |
Podsumowanie:
Określając adres komórki w formule arkusza podajemy najpierw numer kolumny opisany za pomocą litery, a następnie numer wiersza, który jest liczbą.
Adres komórki arkusza w VB określony jest przez słowo Cells oraz podane w nawiasach numer wiersza i numer kolumny:
Cells(nr_wiersza, nr_kolumny).
Gdy korzystamy dwóch danych umieszczonych w innych arkuszach, adres komórki podajemy wtedy jako Worksheets(„Nazwa_arkusza”).Cells(nr_wiersza, nr_kolumny).
Dodawanie dwóch liczb - przykładowy program w VB
Umiejscowienie danych w arkuszu i schemat blokowy
|
A |
B |
C |
1 |
Liczba A |
|
|
2 |
Liczba B |
|
|
3 |
|
|
|
4 |
Suma |
|
|
Cells(1,2)
Cells(2,2)
Cells(4,2)
Program
zanim wpiszemy program musimy umieścić
w arkuszu przycisk
program należy wpisać pomiędzy linie Private Sub CommandButton1_Click()
End Sub
A = Cells(1,2) `wpisz do A zawartość komórki B1
B = Cells(2,2) `wpisz do B zawartość komórki B2
S = A + B `wynik dodawania wpisz do zmiennej S
Cells(4,2) = S `umieść wynik w arkuszu, komórka B4
Po znaku ` umieszczony został komentarz,
który służy jedynie jako informacja dla piszącego lub użytkującego program, a nie ma wpływu
na wykonanie programu.
Zapisz napisany program
Przejdź do arkusza, wyłącz tryb projektowania
i sprawdź działanie programu pisując dane
do odpowiednich komórek arkusza i uruchamiając procedurę przyciskiem.
Zadanie
Zmodyfikuj arkusz dodając trzy procedury realizujące odpowiednio:
Odejmowanie
Mnożenie i dzielenie.
W ten sposób otrzymamy prosty kalkulator.
Spróbuj wykonać dzielenie przez zero i sprawdź reakcję kalkulatora na takie działanie.
Inteligentny kalkulator (odporny na dzielenie przez zero)
Dzielenie przez zero jest w matematyce zabronioną operacją. Czasami jednak się zdarzy, że wpiszemy dane bez zastanowienia, pomylimy ich adres lub w wyniku wcześniej wykonanych działań otrzymamy zero. Nasz nowy kalkulator ma za zdanie podać nam informację
o wprowadzeniu złych danych. Czyli, jeśli w arkuszu w komórce B2 pojawi się zero, nasz program jako wynik działania powinien napisać „Nie dziel przez zero!”.
Zmodyfikujemy teraz nasz kalkulator. Dodamy przycisk o nazwie mądre dzielenie. Nowy algorytm przedstawiony jest na następnej stroniej.
Program realizujący algorytm ma postać:
A = Cells(1,2) `wpisz do A
`zawartość komórki B1
B = Cells(2,2) `wpisz do B
`zawartość komórki B2
`sprawdź, czy w komórce B2 jest zero
If B = 0 then
`jeśli B2 = 0, to wynik jest
`tekstem o dzieleniu przez zero
Cells(4,2) = ”Nie dziel przez zero”
Else `w przeciwnym razie, B ≠ 0
`wykonaj poniższe polecenia
`iloraz A i B wpisz do zmiennej S
S = A / B
`wynik wpisz do komórki B4
Cells(4,2) = S
`zakończ instrukcję warunkową
End If
Instrukcja warunkowa If
Instrukcja jest stosowana wtedy, gdy wykonanie pewnych czynności zależy od spełnienia lub niespełnienia postawionego warunku.
Instrukcja warunkowa If ... może mieć postać:
If warunek then polecenie
gdzie
If - słowo kluczowe oznaczające początek instrukcji warunkowej
W tym przypadku, gdy warunek jest spełniony, wykonujemy związane z nim polecenie, po czym przechodzimy
do kolejnego polecenia. Jeśli warunek nie zostanie spełniony, od razy przejdziemy
do wykonania kolejnego polecenia. Przykładem mogą być zakupy. Musimy kupić chleb, masło i biały ser. Na te produkty mamy przeznaczone pieniądze i na pewno o nie poprosimy. Jeżeli jednak wystarczy nam pieniędzy na kupno Delicji (warunek - czy mamy wystarczającą ilość pieniędzy na kupno ciastek?), to o nie też poprosimy (warunek spełniony), a następnie zapłacimy (kolejne polecenie). Jeśli nie mamy dodatkowych pieniędzy (warunek niespełniony), zapłacimy tylko za podstawowe artykuły (od razu przechodzimy do kolejnego polecenia).
If warunek then
polecenie _1
else
polecenie_2
End If
W tym przypadku, zależnie od stanu warunku, wykonane będzie polecenie_1 lub polecenie_2, dopiero potem program przejdzie do kolejnego polecenia.
Zarówno znów jesteśmy w sklepie. Tym razem mamy kupić czekoladę. Zadanie może wyglądać tak. Jeśli jest gorzka czekolada
z Wedla, to ją kupujemy, jeśli nie ma, to kupujemy biała czekoladę Milka. W każdym przypadku wykonamy jakąś czynność. Rodzaj czynności zależny jest od spełnienia lub niespełnienia warunku określonego w zadaniu.
Wybór Select Case …
Instrukcję tę stosuje się zamiast If ... Then w przypadku, gdy mamy więcej możliwości i instrukcji
z nimi związanych.
Składnia polecenia jest następująca:
Select Case zmienna_testowana
Case wartość_1
Instrukcje_ dla_wartość_1
Case wartość_2
Instrukcje_dla_ wartość_2
...
Case Else
Instrukcje_dla_else
End Select
gdzie
zmienna_testowana |
to dowolna zmienna liczbowa lub znakowa. |
wartość |
to wyrażenie, które określa wartość lub zakres, w którym musi znaleźć się zmienna_testowana, by zostały wykonane przeznaczone dlań instrukcje. |
Instrukcje_dla_ |
Instrukcja lub instrukcje, które są wykonywane tylko wtedy, |
Do określenia zakresu zmiennej_testowanej można używać operatorów relacji wraz z odpowiednim słowem kluczowym Is lub To.
Is - stosujemy wtedy, gdy chcemy sprawdzić, czy zmienna_testowana jest mniejsza lub większa niż zadana liczba. Przykładowa postać takiego warunku jest następująca
Case Is > 100 - co oznacza, że tu przyporządkowane instrukcje wykonane będą wtedy, gdy wartość naszej zmiennej testowanej będzie mniejsza od 100.
To - stosujemy wtedy, gdy chcemy sprawdzić, czy zmienna_testowana zawiera się w określanym przez nas przedziale.
Case 50 To 100 - co oznacza, że tu przyporządkowane instrukcje wykonane będą wtedy,
gdy wartość naszej zmiennej testowanej będzie większa od 50, a mniejsza od 100.
Przykład użycia instrukcji Select Case do sprawdzania wartości zmiennej. Wartość zmiennej Numer odpowiada drugiemu przypadkowi i zostaną wykonane tylko te instrukcje, które są z nim związane. Pozostałe instrukcje zostaną pominięte.
Dim Numer `deklaracja zmiennej Numer
Number = 8 ' inicjalizacja zmiennej, nadanie jej początkowej wartości.
Select Case Numer ' sprawdzenie wartości zmiennej Numer.
Case 1 To 5 ' zmienna Numer między 1 a 5, włącznie.
Cells(3,3)= "Między 1 a 5"
' Poniższa instrukcja zostanie wykonana, ponieważ wartość testowana i podany warunek jest prawdą.
Case 6, 7, 8 ' Numer między 6 i 8.
Cells(3,3)= "Między 6 a 8"
Case 9 To 10 ' Numer jest równy 9 lub 10.
Cells(3,3)= "Większe od 8"
Case Else ' Inne wartości.
Cells(3,3)= "Nie zawiera się między 1 i 10"
End Select
Pętle
Pętle stosowane są wtedy, gdy musimy powtórzyć określoną liczbę razy pewien fragment programu, kilka instrukcji. Zależnie od tego, czy ilość powtórzeń jest z góry określona, czy też zależna od podanego warunku, stosujemy inny rodzaj pętli. W Visual Basicu mamy do dyspozycji dwa podstawowe typy pętli: pętle z licznikiem, które powtarzają wykonywanie zbioru instrukcji ustaloną liczbę razy (For … Next), oraz pętle warunkowe, powtarzające dany kod instrukcji,
gdy dany warunek jest spełniany (Do … While lub Do … Until).
Pętla For … Next
Składnia pętli for jest następująca:
For licznik = wart_pocz To wart_kon
Polecenie (lub polecenia) powtarzane
Next licznik
lub
For licznik = wart_pocz To wart_koń Step wart_krok
Polecenie (lub polecenia) powtarzane
Next licznik
gdzie
For - oznacza początek pętli,
licznik - zmienna używana jako licznik pętli,
wart_pocz - początkowa wartość licznika, od tej wartości zaczyna się pętla,
To - do, separator, między wartością początkowa a końcową licznika,
wart_kon - wartość końcowa licznika pętli,
Next - koniec pętli, słowo kluczowe,
Step - słowo kluczowe, pojawia się, gdy określić chcemy inne od 1 zmiany licznika,
wart_krok - wartość kroku, czyli o ile zmieni się wartość licznika pętli przy każdym obrocie.
Działa ona następująco: polecenie bądź polecenia wykonywane są określoną ilość razy, zależnie od wartości początkowej i końcowej licznika oraz od kroku zadanego w wart_krok. Przy czym licznik może odliczać w górę bądź w dół, z krokiem jeden lub innym, zadanym przez piszącego program. Przy uruchomieniu pętli licznikowi nadawana jest wartość początkowa. Przy każdym obrocie licznik jest zwiększany aż osiągnie wartość końcową. Wartość licznika może być zmieniana o jeden lub o wartość podaną w wart_krok.
Przykładowe wykorzystanie pętli:
program pisuje do kolejnych komórek kolumny C, począwszy od pierwszej, kolejne liczby całkowite, wykonuje polecenie pięćdziesiąt razy; licznikiem jest i, które przy starcie przyjmuje wartość jeden i w kolejnych pętlach automatycznie zwiększane jest
o jeden tak długo, aż osiągnie wartość równą pięćdziesiąt; wtedy polecenie zostanie wykonane
po raz ostatni.
For i = 1 To 50
Cells(i,3)=i
Next i
Teraz licznik (j) zaczyna zliczać od wartości 2 i zlicza do wartości 10, jednakże krok nie jest równy jeden, lecz dwa, czyli przy każdym przejściu licznik będzie automatycznie zwiększany o 2. Poleceniem jest zwiększanie wartości zmiennej total o aktualną wartość licznika przy każdym przejściu pętli. Wartość początkowa zmiennej total ustalona została poza pętlą (przed jej rozpoczęciem).
For j = 2 To 10 Step 2
total = total + j
Next j
MsgBox "The total is " & total `wyprowadzenie wyniku do okna wiadomości
I tym razem licznik nie startuje od zera czy jedynki, lecz od szesnastu. Teraz ma dodatkowo ujemny krok, czyli jest zmniejszany przy każdym obrocie o 2, bo krok pętli równy jest -2. Pętla zostanie zatrzymana po wykonaniu polecenia, gdy licznik osiągnie wartość 2 (wartość końcowa licznika).
For myNum = 16 To 2 Step -2
total = total + myNum
Next myNum
MsgBox "The total is " & total
Pętla Do...While
Jak już wiadomo, pętla Do…While jest pętlą warunkową. Instrukcje w niej umieszczone wykonywane są tak długo, jak długo określony warunek jest spełniony. Jeżeli nie będzie on prawdziwy, działanie pętli zostanie przerwane.
Składnia instrukcji jest następująca:
Do While warunek
Polecenie (lub polecenia) powtarzane
Modyfikacja zmiennej umieszczonej w warunku
Loop
lub
Do While
Polecenie (lub polecenia) powtarzane
Modyfikacja zmiennej umieszczonej w warunku
Loop warunek
gdzie
Do While - słowa kluczowe określające początek pętli warunkowej,
warunek - warunek, od którego uzależnione jest działanie pętli, musi być spełniony, by pętla była wykonywana,
Loop- słowo kluczowe, zamyka pętlę,
Polecenie (lub polecenia) powtarzane - inne instrukcje, które powinny być wykonane,
Modyfikacja zmiennej umieszczonej w warunku - jeśli nie zmienimy wartości zmiennej umieszczonej w warunku, nasza pętla wykonywana będzie nieskończenie wiele razy i program nie zakończy swojego działania. W przeciwieństwie do pętli For...Next, gdzie zmiana licznika następuje samoczynnie w czasie wykonywania pętli, to my sami musimy zadbać o modyfikację zmiennej.
W pierwszym przypadku, gdy warunek nie zostanie spełniony, instrukcje umieszczone w pętli nie zostaną już wykonane. Dzieje się tak dlatego, że warunek sprawdzany jest na początku pętli, a działanie pętli jest przerywane wtedy, gdy nie jest on spełniony. Może się więc zdarzyć, że instrukcje umieszczone w pętli nie zostaną w ogóle wykonane.
W drugim przypadku warunek sprawdzany jest na końcu pętli. Teraz instrukcje zostaną wykonane przynajmniej raz, nawet jeśli warunek od początku nie jest spełniony.
Pętla Do.. Until
Podobnie, jak w przypadku pętli Do...While, mamy do czynienia z pętlą warunkową. Jej działanie zależne jest więc od zadanego w niej warunku. Jednakże pętla Do... Until wykonywana jest dopóki postawiony warunek jest fałszywy.
Składnia instrukcji jest następująca
Do Until warunek
Polecenie (lub polecenia) powtarzane
Modyfikacja zmiennej umieszczonej w warunku
Loop
Jak widać w powyższym przykładzie zmienna MyNum ma początkowo wartość 0, a zatem warunek MyNum > 10 jest fałszywy. Pętla ta zostanie wykonana tyle razy, aż liczba MyNum nie będzie większa od 10, bo warunek stał by się wtedy prawdziwy.
VB w Excelu 8/8
Wykorzystanie Visual Basic do automatyzacji obliczeń w Excelu
C1
wiersz
kolumna
wiersz
kolumna
Cells(1,3)
WYPISZ S
CZYTAJ B
STOP
CZYTAJ A
S <- A + B
START
WYPISZ S
CZYTAJ B
STOP
CZYTAJ A
S <- A + B
START
B = 0 ?
Pisz:
Nie dziel przez zero
N
T
niespełniony
N
spełniony
T
polecenie_1
polecenie_2
warunek
Niespełniony
N
Spełniony
T
polecenie
warunek
polecenia
i <- i + 1
i <= n ?
i <- 0
else
9 <= Numer <= 10
Cells(3,3)= "Nie zawiera się między 1 i 10"
Cells(3,3)= "Większe od 8"
Numer (testowane_wyrażenie)
6 <= Numer <= 8
N
Numer (testowane_wyrażenie)
Cells(3,3)= "Między 6 a 8"
1 <= Numer <=5
Cells(3,3)= "Między 1 a 5"
Numer (testowane_wyrażenie)
zmienna warunku
warunek
Polecenia
spełniony
niespełniony
niespełniony
spełniony
zmienna warunku
warunek
Polecenia
zmienna warunku
warunek
Polecenia
niespełniony
spełniony