Algorytmy i VBA
1 Algorytmy
1. Zapoznaj się z symboliką schematów blokowych.
2. Przeanalizuj podany algorytm wyznaczający minimalną liczbę spośród danych: a, b, c.
dr Piotr Borkowski 1/10
Algorytmy i VBA
3. Przeanalizuj podany algorytm wyznaczający minimalną liczbę spośród danych: a1,& , a200 .
4. Wykonaj algorytm wyznaczajÄ…cy:
" liczbÄ™ przeciwnÄ… do a
" iloczyn dwóch danych liczb: a, b
" iloraz dwóch danych liczb: a, b
" pole prostokÄ…ta o bokach: a, b
" rozwiązania równania kwadratowego o zadanych współczynnikach: a, b, c
" silniÄ™ z danej liczby naturalnej n
" sumÄ™ elementów leżących na przekÄ…tnej macierzy kwadratowej o wymiarach 4×4
" sumÄ™ elementów leżących na przekÄ…tnej macierzy kwadratowej o wymiarach n×n
dr Piotr Borkowski 2/10
Algorytmy i VBA
2 Visual Basic for Applications
2.1 Wprowadzenie
1. Zapoznaj się z podstawowymi informacjami na temat pisania programów w VBA.
Informacje ogólne
Visual Basic for Applications (VBA) to oparty na Visual Basicu (VB) język programowania zaimplementowany
w aplikacjach pakietu Microsoft Office (MS Word, MS Excel, MS PowerPoint). Ta uproszczona wersja Visual
Basica służy przede wszystkim do automatyzacji pracy z dokumentami pakietu Microsoft Office. Podstawową
różnicą między VBA a VB jest to, że VBA nie pozwala na tworzenie samodzielnie wykonujących się aplikacji
typu *.exe. Kod programu (makra) napisanego w VBA zawsze zawarty jest w dokumencie utworzonym przy
pomocy programu obsługującego VBA, na przykład w pliku *.xls arkusza kalkulacyjnego MS Excel. Program
taki wymaga zatem środowiska uruchomieniowego, którym jest zainstalowana na komputerze aplikacja
obsługująca dany dokument. Na zajęciach wykorzystywać będziemy do tego celu MS Excel. Edytor VBA
uruchamiamy na przykład poprzez wciśnięcie ALT+F11 (oczywiście w aktywnym oknie MS Excel). Pisanie
makra rozpoczynamy wybierając z menu Insert, a następnie Module. Po wstawieniu nowego modułu, po prawej
stronie pojawia się puste pole edycji, w którym możemy zacząć pisać swój program. Makro uruchamia się
poprzez kliknięcie na znak Run (lub klawisz F5).
Struktura programu
Program w VBA składa się z jednej lub wielu procedur napisanych w jednym module. Może zawierać również
zdefiniowane funkcje (jest to procedura, która zwraca wartość). Procedury jak i funkcje mogą korzystać z
argumentów, czyli zmiennych które są przekazywane do procedury (funkcji) w momencie jej wywołania (jeśli
procedura wywołana zmienia wartość argumentu, czyli zmienną przekazaną to zmiana ta pozostanie kiedy
sterowanie powróci do procedury wywołującej). Składnie procedury i funkcji mają postać:
Sub nazwa_procedury(argument1, argument2, ...) Function nazwa_funkcji(argument1, argument2, ...) As zwracany_typ_danych
deklaracja zmiennych deklaracja zmiennych
....................... .......................
kod procedury kod funkcji
.......................
.......................
nazwa_funkcji = wartość_zwrócona_przez_funkcję
End Function
End Sub
W kodzie procedury (funkcji) można umieścić instrukcję Exit Sub ( Exit Function ), jeśli chcemy zaprzestać w
danym miejscu wykonywania tej procedury (funkcji).
Deklaracja zmiennych
Programy manipulują danymi, które są przechowywane w zmiennych. Zmienne mogą przechowywać różne typy
danych (liczby, tekst, data i tak dalej). StÄ…d termin typ danych.
dr Piotr Borkowski 3/10
Algorytmy i VBA
Zmienne można deklarować zarówno na poziomie modułu (wówczas mają zasięg na cały moduł) jak i na
poziomie procedury, czy też funkcji (wówczas mają zasięg wewnątrz procedury, czy też odpowiednio wewnątrz
funkcji). Deklaracja zmiennej odbywa się za pomocą następującej składni:
Dim nazwa_zmiennej As typ_danych - standardowa deklaracja zmiennej
Public nazwa_zmiennej As typ_danych - gdy zmienna ma mieć zasięg we wszystkich modułach
W kodzie procedury (funkcji) następuje nadanie wartości zmiennym za pomocą operatora równości.
Kod procedury (funkcji)
Kod procedury (funkcji) jest pisany z wykorzystaniem operatorów, funkcji wbudowanych oraz instrukcji.
OPERATORY
Operator Opis
+ operator dodawania
- operator odejmowania
* operator mnożenia
/ operator dzielenia
^ operator potęgowania
Mod operator modulo
& operator łączenia łańcuchów
< operator mniejszości
<= operator mniejszości lub równości
> operator większości
>= operator większości lub równości
= operator równości
Not operator negacji
And operator koniunkcji
Or operator alternatywy
Eqv operator równoważności
Imp operator implikacji
FUNKCJE WBUDOWANE
Funkcja Opis
Abs(argument) wartość bezwzględna
Sgn(argument) znak argumentu
Int(argument) zwraca największą liczbę całkowitą z argumentu
Log(argument) logarytm naturalny
Exp(argument) funkcja wykładnicza o podstawie e
Sqr(argument) pierwiastek kwadratowy
Sin(argument) funkcja sinus
Cos(argument) funkcja cosinus
Tan(argument) funkcja tangens
Val( tekst ) zmienia tekst na liczbÄ™
Str(liczba) zmienia liczbÄ™ na tekst
Len( tekst ) zwraca długość tekstu
Left( tekst ,n) zwraca n pierwszych znaków tekstu
Right( tekst ,n) zwraca n ostatnich znaków tekstu
Mid( tekst n,m) zwraca m znaków od n-tego
InputBox( komunikat ) wyświetla okno wprowadzania danych
MsgBox(dane) wyświetla okno wyjścia danych
Cells(n,m) odwołanie się do komórki Excela
WorkSheets( arkusz ).Cells(n,m) odwołanie się do komórki w określonym arkuszu
Shell( ścieżka ) uruchamia zewnętrzny program
LoadPicture( ścieżka ) ładuje obraz do obiektu
dr Piotr Borkowski 4/10
logiczne
porównania
arytmetryczne
operatory
operatory
operatory
funkcje matematyczne
funkcje
funkcje
wej
Å›
cia/wyj
Å›
cia
tekstowe
Algorytmy i VBA
INSTRUKCJE
Instrukcja Opis
Call nazwa_procedury(argument1, argument2, ...) wywołanie procedury
If warunek1 Then
kod wykonywany gdy warunek1 jest prawdziwy
ElseIf warunek2 Then
kod wykonywany gdy warunek2 jest prawdziwy, a warunek1 nieprawdziwy instrukcja warunkowa
Else
kod wykonywany gdy wszystkie warunki sÄ… nieprawdziwe
End If
Select Case nazwa_zmiennej
Case war_1
kod wykonywany gdy zmienna przyjmie wartość war_1
...
Case war_n instrukcja wyboru
kod wykonywany gdy zmienna przyjmie wartość war_n
Case Else
kod wykonywany gdy zmienna nie przyjmie wartości: war_1, ..., war_n
End Select
For licznik = poczÄ…tek_licznika TO koniec_licznika
kod instrukcja powtarzania kodu
Next licznik
Programowanie obiektowe
VBA umożliwia programowanie obiektowe, czyli kod wielu formantów (obiektów graficznych tworzących
program) jest tworzony automatycznie. W tym celu z menu Insert edytora VBA należy wybrać polecenie
UserForm. Jeśli nie pokazało się okno z właściwościami powstałego formularza (w którym możemy np. zmienić
nazwę itp.) to w menu View wybieramy polecenie Properties. Teraz możemy zabrać się do narysowania
potrzebnych nam formantów (CommandButton przycisk, ComboBox - pole kombi, ListBox - pole listy,
SpinButton - przycisk pokrętła, TextBox - pole tekstowe, Label - etykieta). Chcąc napisać procedury, które mają
towarzyszyć określonemu zdarzeniu (np. kliknięciu w przycisk), najeżdżamy na narysowany formant, a
następnie klikamy w niego prawym przyciskiem myszy i wybieramy View Code.
Rejestrowanie makra
VBA umożliwia również automatyczne tworzenie kodu poprzez rejestrowanie operacji wykonanych w aplikacji.
W tym celu z menu Narzędzia (MS Excel) należy wybrać polecenie Makro, a następnie Zarejestruj nowe makro.
Zakończenie rejestrowania makra odbywa się poprzez kliknięcie na przycisk Zatrzymaj rejestrowanie.
2. Wpisz do edytora VBA oraz przeanalizuj podany kod makra wyznaczajÄ…cego minimalnÄ… liczbÄ™
spośród danych: a, b, c, wykorzystującego funkcję InputBox oraz funkcję MsgBox.
Sub Min_z_trzech()
Dim a, b, c, x As Double
a = InputBox("Podaj a:")
b = InputBox("Podaj b:")
c = InputBox("Podaj c:")
x = a
If x > b Then
x = b
End If
If x > c Then
x = c
End If
MsgBox ("Najmniejsza z trzech podanych liczb to: " & x)
End Sub
3. Wpisz do edytora VBA oraz przeanalizuj podany kod makra wyznaczajÄ…cego minimalnÄ… liczbÄ™
spośród danych: a1,& , a200 pobieranych z pierwszej kolumny aktywnego arkusza.
dr Piotr Borkowski 5/10
Algorytmy i VBA
Sub Min_z_dwustu()
Dim x As Double
x = Cells(1, 1)
For i = 2 To 200
If x > Cells(i, 1) Then
x = Cells(i, 1)
End If
Next i
MsgBox ("Najmniejsza z dwustu podanych liczb to: " & x)
End Sub
4. Wpisz do edytora VBA oraz przeanalizuj podany kod makra wyznaczającego z daty, dzień
tygodnia. Makro wykorzystuje algorytm Zellera (nie uwzględnia zle wpisanej daty).
Sub Dzień_tygodnia()
Dim d, m, r As Integer
d = InputBox("Podaj dzień:")
m = InputBox("Podaj miesiÄ…c:")
r = InputBox("Podaj rok:")
' Algorytm Zellera wyznaczajÄ…cy numer dnia tygodnia
If m < 3 Then
r = r - 1
m = m + 12
End If
d = r + Int(r / 4) - Int(r / 100) + Int(r / 400) + _
3 * m - Int((2 * m + 1) / 5) + d + 1
d = d - Int(d / 7) * 7
Select Case d
Case 0
MsgBox ("Podany dzień to niedziela")
Case 1
MsgBox ("Podany dzień to poniedziałek")
Case 2
MsgBox ("Podany dzień to wtorek")
Case 3
MsgBox ("Podany dzień to środa")
Case 4
MsgBox ("Podany dzień to czwartek")
Case 5
MsgBox ("Podany dzień to piątek")
Case 6
MsgBox ("Podany dzień to sobota")
End Select
End Sub
5. Utwórz formularz, za pomocą którego można będzie przeliczyć walutę euro na złotówki. Powinien
on zawierać trzy pola tekstowe, trzy etykiety oraz przycisk, tak jak to zostało pokazane na rysunku.
Na rysunkach przedstawiono również kod procedury jaka jest wykonywana po kliknięciu na
przycisk oraz właściwości formularza i formantów na nim umieszczonych.
dr Piotr Borkowski 6/10
Algorytmy i VBA
dr Piotr Borkowski 7/10
Algorytmy i VBA
6. Zarejestruj makro, które rysuje linię, a następnie zmienia jej grubość na 6 pkt. Przeanalizuj kod
powstałego makra.
2.2 Programowanie w VBA
1. Napisz makro wyznaczajÄ…ce liczbÄ™ przeciwnÄ… do liczba a, wykorzystujÄ…ce funkcjÄ™ InputBox oraz
funkcjÄ™ MsgBox.
2. Napisz makro drukujące w komórce E1 iloczyn dwóch liczb pobieranych z komórek A1 i C1. W
komórkach B1 i D1 powinny być drukowane odpowiednio znaki mnożenia i równości.
3. Napisz makro drukujące w komórce E1 iloraz dwóch liczb pobieranych z komórek A1 i C1. W
komórkach B1 i D1 powinny być drukowane odpowiednio znaki dzielenia i równości. W przypadku,
dr Piotr Borkowski 8/10
Algorytmy i VBA
gdy wartość pobierana z komórki C1 byłaby zerem, zamiast wyniku powinien wyświetlić się
komunikat: Nie dziel cholero przez zero .
4. Napisz makro wyznaczające pole prostokąta. Przy wprowadzeniu i wyprowadzeniu danych użyj
funkcji InputBox i MsgBox. Pamiętaj, że pole nie może być wartością ujemną.
5. Napisz makro wyznaczające pierwiastki równania kwadratowego. Przy wprowadzaniu i
wyprowadzaniu danych użyj funkcji InputBox i MsgBox. Pamiętaj, że gdy współczynnik przy
niewiadomej w najwyższej potędze jest zerem, to równanie nie jest równaniem kwadratowym.
6. Napisz makro wyznaczajÄ…ce silniÄ™ z liczby naturalnej. Przy wprowadzeniu i wyprowadzeniu
danych użyj funkcji InputBox i MsgBox. Omiń warunek sprawdzania czy wprowadzona liczba jest
naturalna.
7. Napisz makro wyznaczające sumę elementów leżących na przekątnej macierzy kwadratowej o
wymiarach 4×4 , gdzie dane sÄ… pobierane z komórek: A1, A2, A3, A4, B1, B2, B3, B4, C1, C2,
C3, C4, D1, D2, D3, D4, zaś wynik drukowany jest przy użyciu funkcji MsgBox.
8. Napisz makro wyznaczające sumę elementów leżących na przekątnej macierzy kwadratowej o
wymiarach n×n (n jest wprowadzane przy użyciu funkcji InputBox), gdzie dane sÄ… pobierane z
komórek arkusza, zaś wynik drukowany jest przy użyciu funkcji MsgBox.
9. Napisz makro drukujące w komórce D1 pole trójkąta o współrzędnych wierzchołków pobieranych z
komórek: A1, B1, A2, B2, A3, B3. Wykorzystaj do tego wzór Herona.
10. Napisz makro drukujące w arkuszu tabliczkę mnożenia poczynając od komórki B2.
11. Napisz makro wyznaczajÄ…ce sumÄ™ dwóch macierzy o wymiarach n×m (n i m sÄ… wprowadzane
przy użyciu funkcji InputBox), gdzie dane są pobierane z komórek Arkusza1 i Arkusza2, zaś wynik
drukowany w Arkuszu3.
12. Napisz makro wyznaczajÄ…ce iloczyn dwóch macierzy o wymiarach n1×m1, n2×m2 (n1, n2, m1,
m2 są wprowadzane przy użyciu funkcji InputBox), gdzie dane są pobierane z komórek Arkusza1 i
Arkusza2, zaś wynik drukowany w Arkuszu3. Pamiętaj, że nie zawsze dwie macierze można przez
siebie pomnożyć.
13. Napisz makro drukujące w arkuszu wartości funkcji: sinus, cosinus, tangens, cotangens dla
argumentów od 0 do 90 stopni.
14. Napisz makro wyznaczające pole wspólnej części dwóch prostokątów, których po dwa boki są
równoległe do osi OX i dokładnie jeden wierzchołek jednego z prostokątów, znajduje się we
wnętrzu drugiego prostokąta. Współrzędne wierzchołków pierwszego prostokąta są pobierane z
komórek: A1, B1, A2, B2, A3, B3, A4, B4 w taki sposób, że kolejne komórki zawierają współrzędne
wierzchołków, rozpoczynając od lewego górnego, a kończąc na prawym górnym. Podobnie
pobieraną mają być współrzędne wierzchołków drugiego prostokąta z komórek: A5, B5, A6, B6,
A7, B7, A8, B8. Wynik ma być wydrukowany w komórce D1.
15. Napisz makro zmieniające liczby na tekst według poniższego wzoru:
tak aby użytkownik najpierw podawał długość kodu liczbowego (za pomocą funkcji InputBox), a
następnie poszczególne jego składowe. Wynik ma być wyprowadzony za pomocą funkcji MsgBox.
W następnej kolejności odszyfruj kryptogram:
16. Napisz makro na wzór stworzonego w poprzednim punkcie, które szyfruje tekst według klucza
przez siebie wymyślonego. Następnie zaszyfruj dowolny tekst.
17. Napisz makro, za pomocą którego można odszyfrować kryptogram stworzony w poprzednim
punkcie.
18. Napisz makro sprawdzajÄ…ce czy dana liczba jest naturalna. Przy wprowadzaniu i wyprowadzaniu
danych użyj funkcji InputBox i MsgBox.
19. W oparciu o stworzone w poprzednim punkcie makro, napisz funkcjÄ™ zwracajÄ…cÄ… danÄ… typu
Boolean, która sprawdza czy jej argument jest liczbą naturalną, a następnie uzupełnij o tą funkcję,
makro wyznaczajÄ…ce silniÄ™ z liczby naturalnej.
20. Przerób formularz przeliczający walutę euro na złotówki, tak, aby wykonywał operację odwrotną.
21. Zaprojektuj prosty kalkulator z funkcjami przedstawionymi na rysunku.
dr Piotr Borkowski 9/10
Algorytmy i VBA
dr Piotr Borkowski 10/10
Wyszukiwarka
Podobne podstrony:
część pierwszabuddyjska tradycja gelug czesc pierwsza eiobaAfirmacje czesc pierwsza(1)METODY NUMERYCZNE CZESC PIERWSZA2 Część pierwszapyt 3 część pierwsza KULTURA MINOJSKAOpenAL część pierwszaNoss Kurs EAGLE Część pierwszaDisslowa Jak gotować część pierwszawięcej podobnych podstron