Programowanie w VBA

21
Programowanie Programowanie w VBA w VBA Funkcje c.d. Strukturalność. Funkcje c.d. Strukturalność. Algorytmy. Algorytmy. Ćwiczenia przed kolokwium. Ćwiczenia przed kolokwium.

description

Programowanie w VBA. Funkcje c.d. Strukturalność. Algorytmy. Ćwiczenia przed kolokwium. Deklaracje tablic. Dim tablica(1 to 10) As Long Dim tablica(10) = Dim tablica(0 to 10) Dim tablica() – nieokreślony wymiar (deklaracja Dim przyjmuje tylko liczby) ReDim tablica(0 to 10) - PowerPoint PPT Presentation

Transcript of Programowanie w VBA

Page 1: Programowanie w VBA

ProgramowanieProgramowaniew VBAw VBA

Funkcje c.d. Strukturalność. Algorytmy.Funkcje c.d. Strukturalność. Algorytmy.

Ćwiczenia przed kolokwium.Ćwiczenia przed kolokwium.

Page 2: Programowanie w VBA

Funkcje zwracające tabliceFunkcje zwracające tablice• REGLINP(lista_y; lista_x)

(regresja liniowa, zwraca a i b równania)• MACIERZ.ODW(macierz_kwadratowa)• MACIERZ.ILOCZYN(macierz1;macierz2)

Wstawianie funkcji tablicowej:1. Wpisujemy formułę, zaznaczamy obszar z

komórką z formułą w rogu, F2, CTRL+SHIFT+ENTER

2. Zaznaczamy obszar potrzebny do działania funkcji, wpisujemy formułę (bez odznaczania zaznaczenia), CTRL+SHIFT+ENTER

Page 3: Programowanie w VBA

Funkcje zwracające tabliceFunkcje zwracające tablice• Funkcja musi być typu Variant i przypisywana jej wartość w kodzie

musi być typu tablicy;• Tworzenie takiej funkcji: zaznaczenie zakresu, wpisanie nazwy

funkcji, naciśnięcie razem: ctrl+shift+enter;

Function Przyklad() As VariantDim tablica(0 To 2, 0 To 2) As IntegerDim i As ByteDim j As Byte For i = 0 To 2 For j = 0 To 2 tablica(i, j) = (i + j) Next j Next iPrzyklad = tablicaEnd Function

Page 4: Programowanie w VBA

ZadaniaZadania

1.Znaleźć najmniejszy element zbioru (podanych w wierszu);

2.Znaleźć największy element zbioru;

3.Sortujące od najmniejszego do największego elementy zbioru liczb (podanych w wierszu);

Funkcja tablicowa – zaznaczamy obszar do poddania funkcji tablicowej, wpisujemy w róg obszaru funkcję, wciskamy ctrl+shift+enter;

Page 5: Programowanie w VBA

Znalezienie najmniejszego Znalezienie najmniejszego elementu w zbiorzeelementu w zbiorze

Algorytm:

Weź pierwszy element jako minimum

pętla:

czy i_element jest mniejszy od minimum?

-> tak? minimum to i_element

-> nie? minimum sie nie zmienia

koniec pętli

minimum to najmniejszy element zbioru

Page 6: Programowanie w VBA

Złożoność obliczeniowaZłożoność obliczeniowa

• Przy problemie, który trzeba rozwiązać dla n elementów, ile operacji trzeba wykonać?

• Wyszukiwanie najmniejszej liczby – złożoność n

(między 1n a 2n : dla każdej porównanie, dla niektórych przypisanie)

• a*n dla dużych n zawsze będzie mniejsze niż a*n^2 (Porównywanie wartości wszystkich ze wszystkimi), więc mówimy o złożoności n lub n^2

• Złożoność obliczeniowa może też być np.:

n! n^a (a również ułamkowe) n^n n^n^n n*log(n)

Page 7: Programowanie w VBA

Złożoność obliczeniowaZłożoność obliczeniowa• Generalnie dąży się do zmniejszania złożoności

obliczeniowej algorytmów.• Niekiedy dąży się do zwiększenia złożoności

obliczeniowej niektórych algorytmów, np. zabezpieczanie poprzez szyfrowanie ma celowo stworzony system tak, aby rozszyfrowywanie było szybkie z pomocą klucza, natomiast rozszyfrowywanie na chybił-trafił miało jak największą złożoność obliczeniową, tak, żeby nawet dla krótkich haseł było to zbyt skomplikowane.

Page 8: Programowanie w VBA

Sortowanie zbioruSortowanie zbioru

• Złożoność obliczeniowa nie mniejsza niż n (nie da się nie sprawdzić czy wszystkie elementy są w dobrej kolejności).

• Podstawowe metody n^2

• Niektóre metody dla optymistycznych warunków mogą być szybsze niż n^2, na przykład rzędu n*log(n)

Page 9: Programowanie w VBA

Sortowanie zbioruSortowanie zbioru

Algorytm:pętla zewnętrzna

pętla wewnętrzna (przepychanie elementu)weź element(i)sprawdź czy jest większy od element(i+1)

-> tak? Zamień je miejscami-> nie? Nic nie rób

koniec pętli wewnętrznejkoniec pętli zewnętrznej

Page 10: Programowanie w VBA

Żeby posortować, trzeba stworzyć sobie przykładowy Żeby posortować, trzeba stworzyć sobie przykładowy zbiór do posortowania – czyli przypadkowe liczby nie zbiór do posortowania – czyli przypadkowe liczby nie

po kolei…po kolei…

Page 11: Programowanie w VBA

Przedeklarowanie zmiennejPrzedeklarowanie zmiennej• Elementów tablicy będącej argumentem funkcji nie

można zmieniać;• Trzeba zadeklarować zmienną tablicową, a następnie

przepisać zawartość zmiennej-argumentu do niej (przepisanie w formie pętli przepisującej element po elemencie);

• Aby zadeklarować zmienną tablicową, której wielkość będzie zależna od argumentu, trzeba wykonać następujące operacje:- zadeklarować zmienną tablicową (ale bez zakresów, puste nawiasy) typu takiego, jakiego mają być elementy tablicy;- PRZEDEKLAROWAĆ (komenda ReDim) zmienną tablicową bezwymiarową na zmienną tablicową zwymiarowaną zmiennymi (normalnie deklaracja musi mieć stałe wartości zakresów);

Page 12: Programowanie w VBA

Sortowanie zbioruSortowanie zbioruFunction SORT(zakres_komorek As Range) As Variant

Dim wynik() As DoubleDim i As IntegerDim j As IntegerDim tmp As DoubleDim element As Variant

ReDim wynik(0 To zakres_komorek.Count - 1)i = 0j = 0

<przepisanie tablicy zakres_komorek do tablicy wynik po elemencie>

<podwójna pętla, w której wewnętrzna pętla będzie przepychała elementy po jednym>

SORT = wynikEnd Function

Page 13: Programowanie w VBA

ZadaniaZadania

Napisz funkcje:

• Sprawdzająca ile jest liczb nieparzystych w zakresie podanym jako argument (z obsługą błędu wystąpienia nie-liczby);

• Funkcję tablicową (bezargumentową), której wartością jest tabliczka mnożenia 10x10.

Page 14: Programowanie w VBA

StrukturalnośćStrukturalnośćWzględność opisu i szczegółowości operacji:Wyobraźmy sobie operacje parzenia herbaty:1.Nalej wodę do czajnika;2.Zagotuj wodę;3.Wrzuć herbatę do kubka;4.Zalej herbatę.

Na przykład trzeci element w rzeczywistości składa się z operacji:

1.Otwórz szafkę;2.Weź pudełko z szafki;3.Otwórz pudełko;4.Weź torebkę z pudełka;5.Zamknij pudełko;6.Odłóż pudełko do szafki;7.Zamknij szafkę;8.Włóż torebkę do kubka;

Page 15: Programowanie w VBA

Strukturalność c.d.Strukturalność c.d.Także czynność otwarcia szafki oznacza

w rzeczywistości podniesienie ręki, złapanie za uchwyt, itd.

Podniesienie ręki również oznacza wysłanie sygnałów przez mózg do nerwów, mięśni, itd.

Odpowiednikami sygnałów mózgu są sygnały procesor-pamięć-peryferia, oraz przerzucanie danych do rejestrów, pamięci, itd. (to nas nie interesuje jako programistów VBA), podniesienie ręki to podstawowe komendy, czynności to proste operacje jak instrukcje w pętlach czy instrukcje warunkowe, a wykonanie całych algorytmów (jak zrobienie herbaty) to odpowiednie dobranie kolejnych operacji które składają się na program realizujący dany algorytm.

Page 16: Programowanie w VBA

ProceduryProcedury

• Sub, End Sub (makra);• Private Sub (makra niedostępne z poziomu Excela, tylko

z poziomu VBA);

• Wywoływanie podprocedur (normalne procedury, ale robiące tylko jakąś czynność mającą sens dopiero w większej całości (robi się to po to, żeby był czytelniejszy kod):

• Call <nazwa procedury> (<ew. zmienne które mają być dane procedurze>)

• Funkcji napisanych przez siebie w danym arkuszu (grupie modułów) można używać normalnie jak innych poleceń (naturalnie podając argumenty); Zwrócą one wartość takiego typu, jakiego typu jest funkcja;

Page 17: Programowanie w VBA

Odwołania do procedurOdwołania do procedurSub przyklad1() Dim dana As Variant Dim dana2 As Variant dana = 1 Call podprogram1(dana) MsgBox ("Wszystko ok, wynik to " & dana & ".") dana2 = funkcja1(dana) MsgBox ("Wszystko ok, wynik to " & dana2 & ".")End Sub

Private Sub podprogram1(dana) dana = dana * 2End Sub

Function funkcja1(dana) As Integer funkcja1 = dana * 3End Sub

Page 18: Programowanie w VBA

Odwołania do procedur c.d.Odwołania do procedur c.d.

• Odwołanie standardowe, jeśli podprogram operuje na zmiennej, zmieni ją i dalszy ciąg programu głównego będzie już używał nowej wartości zmiennej;

• Aby podprogram mógł operować na przydzielonej zmiennej, a żeby główny program nadal używał starej wartości w dalszym ciągu wykonywania, używa się opcji byVal, wówczas na potrzeby podprocedury/funkcji tworzy się kopia zmiennej;

Page 19: Programowanie w VBA

Odwołania do procedur c.d.Odwołania do procedur c.d.

Sub glowny() Dim x As Integer x = 5 Call podprogram(x) MsgBox (x)End Sub

Sub podprogram(ByVal dana) dana = dana ^ 2 MsgBox (dana)End Sub

Page 20: Programowanie w VBA

Żeby zrozumieć rekurencję, trzeba Żeby zrozumieć rekurencję, trzeba najpierw zrozumieć rekurencję…najpierw zrozumieć rekurencję…

Page 21: Programowanie w VBA

Trik – odwołanie funkcji do Trik – odwołanie funkcji do samej siebiesamej siebie

Function siln(wartosc As Integer) wartosc = wartosc - 1 If wartosc = 0 Then siln = 1 Exit Function End If siln = (wartosc + 1) * siln(wartosc)End Function